我有一个用F#编写的WebApi,我需要在它传输和接受的记录中添加更多字段。使用Newtonsoft.Json库将数据作为Json传输。
这是记录:
[<DataContract(Name="Foo")>]
[<CLIMutable>]
type Foo =
{
[<DataMember>] Name: String
[<DataMember>] Time: DateTimeOffset
[<DataMember>] Status : String
[<DataMember>] Newfield : int64 array // new
[<DataMember>] OptionalField : DateTimeOffset option // new
}
所以Json我收到的似乎是
{
"Name":"Bob",
"Time":"2017-12-22 06:00:00",
"Status":"OK",
}
缺少新字段。使用OptionalField可以有目的地省略它。
然而,当这被反序列化时,Newfield&amp; OptionalField设置为 null ,这在F#land中是不好的。
let! content = this.Request.Content.ReadAsStringAsync() |> Async.AwaitTask
let foo = JsonConvert.DeserializeObject<Foo>(content)
我有什么能力用清空数组或无填充字段?
显然在这种情况下我可以检查创建的项目并修复它,但这只是一个更广泛问题的例子。我喜欢某种可以在一个地方应用的通用解决方案(JsonConverter,新成员的属性等) - 而不是需要检查反序列化后应该修复的每个字段。