微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

序列化内部 JsonValue

如何解决序列化内部 JsonValue

我正在尝试使用 Json 类型提供程序来创建类型并遍历列表。但是,我还需要访问每个项目的序列化 json。

这是我所拥有的

#r "nuget: FSharp.Data"
#r "nuget: System.Text.Json"
 
open FSharp.Data
open System.Text.Json

type Users = JsonProvider<"""{"users":[{"id":1,"name": "John"},{"id":2,"name": "Paul"}]}""">

let data = Users.GetSample().Users

let printProduct (id:int,userjson: string) = 
    printfn "%i %s" id userjson

let returnIdandJson() =
    data |> Seq.map(fun x-> (printProduct (x.Id,JsonSerializer.Serialize x)))


returnIdandJson() 

这个打印

1 {"JsonValue":{"Tag":3,"Isstring":false,"IsNumber":false,"IsFloat":false,"IsRecord":true,"IsArray":false,"IsBoolean":false,"IsNull":false,"_Pri:false,"_Print":"{\r\n  \u0022id\u0022: 1,\r\n  \u0022name\u0022: \u0022John\u0022\r\n}"}}
2 {"JsonValue":{"Tag":3,"_Print":"{\r\n  \u0022id\u0022: 2,\r\n  \u0022name\u0022: \u0022Paul\u0022\r\n}"}}

我想要的是

1 {"id":1,"name": "John"}
2 {"id":2,"name": "Paul"}

有没有办法从 JsonValue 访问和序列化内部列表项?

谢谢

解决方法

您可以通过提供者返回的每个对象上存在的 .JsonValue 属性访问原始 JSON。此属性返回类型 JsonValue,您可以根据需要以编程方式对其进行分析(例如调用其 Properties() 方法或某些类似的方法),并且它还有一个简单的 ToString 实现,它只返回序列化的JSON:

let printProduct (id:int,userJson: string) = 
    printfn "%i %s" id userJson

let returnIdandJson() =
    data |> Seq.map(fun x-> (printProduct (x.Id,string x.JsonValue)))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。