【问题标题】:Serialise inner JsonValue序列化内部 JsonValue
【发布时间】:2021-07-02 13:31:24
【问题描述】:

我正在尝试使用 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 访问和序列化内部列表项?

谢谢

【问题讨论】:

    标签: f# f#-interactive f#-data


    【解决方案1】:

    您可以通过提供程序返回的每个对象上的.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)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 2013-04-25
      • 2011-09-12
      • 2014-10-24
      • 2011-12-21
      • 1970-01-01
      • 2013-10-06
      相关资源
      最近更新 更多