【发布时间】:2020-01-31 22:56:57
【问题描述】:
我正在使用一个应该返回对象的 API,例如
{
"some_object": {
"some_field": "some value"
}
}
当该对象为空时,我希望
{
"some_object": null
}
或
{
"some_object": {}
}
但他们送我的是
{
"some_object": []
}
...即使它从来都不是一个数组。
使用时
JsonSerializer.Deserialize<MyObject>(myJson, myOptions)
当[] 出现在预期null 的位置时,将引发异常。
我可以选择性地忽略这个异常吗?
我目前的处理方式是在反序列化之前读取 json 并使用正则表达式对其进行修复。
如果可能的话,我更喜欢使用System.Text.Json,而不是引入其他依赖项。
【问题讨论】:
-
发生异常时你想做什么?请注意,其他几个格式错误也可能发生异常。如果您想忽略异常并继续序列化,则可以使用
[OnError]属性。 -
如果我可以将异常隔离到这个特定的东西上,那么吞下它是安全的。也许在 OnError() 里面我可以看到当前属性是否是有问题的,如果是,继续?
-
你可以试试
JsonConvert.DeserializeObject<MyObject>("some json string", new JsonSerializerSettings { Error = MyDeserializationErrorHandler });Newtonsoft Documentation -
您可以为您的班级创建一个自定义 JsonConverter,然后对您的属性进行
JsonToken.StartArray检查,然后从那里返回 null。 stackoverflow.com/questions/40439290/… -
@Chris 我添加了一个基于
[OnError]属性的解决方案。看看吧。
标签: c# json asp.net-core system.text.json