是否可以使用 FsPickler 在 F# 中序列化可选值,以便:
使用以下示例代码:
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/