【发布时间】:2021-11-20 13:50:13
【问题描述】:
上下文:
一种类型有两种表示形式:一种在 C# 中,另一种在 F# 中。 C#类型的值被序列化为json,然后反序列化为F#类型的值。
有没有直接的方法将null json 属性转换为Option<> F# 值?
我正面临这样一种情况:null C# DateTime? UpdatedDate 属性被序列化为 json,然后预计会被反序列化为 FSharpOption<DateTime> UpdatedDate 值(F# 类型、C# 代码、长篇故事......)代码。
我的 json 看起来像这样:
{
"Property1": "1",
"UpdatedDate": null,
"Property2": "2"
}
从技术上讲,我可以将我的 json 反序列化为包含 DateTime? UpdatedDate 的 C# 类型,然后将结果值映射到包含 FSharpOption<DateTime> UpdatedDate 的 F# 类型,但肯定有更好的方法...
编辑:
为了反序列化 json,我使用 Newtonsoft 的 JsonConvert.DeserializeObject 和 .NET 5 + C# 9。
【问题讨论】:
-
您使用的是哪个 JSON 序列化库?如果是 Newtonsoft,那么 Newtonsoft.Json.FSharp 会为您所描述的内容提供支持。
-
@brianberns 啊,应该提到,对不起。我正在使用 Newtonsoft 的
JsonConvert.DeserializeObject。 -
github.com/jet/FsCodec 有一个
FsCodec.NewtonsoftJson,其中包含一个用于 Newtonsoft 的OptionConverter,它可以干净地处理FSharpOptions 对于 STJ,v5 可以正确处理它们 OOTB(以前的FsCodec.SystemTextJson有一个JsonOptionConverter通用,不需要你跳过的箍(但只使用 STJ 5.0 库是真正的答案)) -
谢谢@RubenBartelink 我一定会检查的。
标签: c# json f# option fsharpoption