序列化内部 JsonValue

Serialise inner 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,"IsNull":false,"_Print":"{\r\n  \u0022id\u0022: 1,\r\n  \u0022name\u0022: \u0022John\u0022\r\n}"}}
2 {"JsonValue":{"Tag":3,"IsString":false,"IsNumber":false,"IsFloat":false,"IsRecord":true,"IsArray":false,"IsBoolean":false,"IsNull":false,"_Pri:false,"IsNull":false,"_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。这个 属性 returns 类型 JsonValue,你可以根据需要以编程方式分析它(例如调用它的 Properties() 方法或类似的方法),它还有一个方便的 ToString 实现只是 returns 序列化 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)))