gpt4 book ai didi

使用 FsPickler 对可选值进行 JSON 序列化

转载 作者:行者123 更新时间:2023-12-04 14:55:42 34 4
gpt4 key购买 nike

是否可以使用 FsPickler 在 F# 中序列化可选值,以便:

  • 当值为Some()时,包含的值被序列化
  • 当它为 None 时,它​​根本不会被序列化?

  • 使用以下示例代码:
    type Person = { name: string; age: int option }

    let data = [
    { name = "Helena"; age = Some(24) };
    { name = "Peter"; age = None }
    ]

    let jsonSerializer = FsPickler.CreateJsonSerializer(true, true)
    let streamWriter = new StreamWriter(@"C:\output.json")
    let out = jsonSerializer.SerializeSequence(streamWriter, data)
    output.json文件包含以下 JSON:
    [
    {
    "name": "Helena",
    "age": {
    "Some": 24
    }
    },
    {
    "name": "Peter",
    "age": null
    }
    ]

    但我希望 JSON 文件的内容看起来像这样:
    [
    {
    "name": "Helena",
    "age": 24
    },
    {
    "name": "Peter"
    }
    ]

    我正在使用 FsPickler.Json v3.2.0 和 Newtonsoft.Json v9.0.1。

    更新(2017 年 1 月 11 日) :在下面的答案中使用 Stuart 链接的要点中的脚本,我得到了它的工作方式:
    let obj = { name = "Peter"; age = None }
    let stringWriter = new StringWriter()
    let jsonSerializer = new JsonSerializer()
    jsonSerializer.Converters.Add(new IdiomaticDuConverter())
    jsonSerializer.NullValueHandling <- NullValueHandling.Ignore
    jsonSerializer.Serialize(stringWriter, obj)

    最佳答案

    使用 Newtonsoft.Json,您可以使用 gist here (信用:艾萨克亚伯拉罕)给你你所追求的行为。

    很有趣,就在您发布此内容之前的片刻,我正在查看 FsPickler.Json 中是否存在相同的内容,但没有得出任何结论。您可以使用 FsPickler 中使用的 TypeShape 使要点更清晰,但不确定 FsPickler.Json 是否可以立即为您执行此操作。

    关于使用 FsPickler 对可选值进行 JSON 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41578734/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com