如何区分Json.Net中未提供的空值和值?
使用Json.net反序列化是否有一种方法可以区分空值和未提供的值,即缺少密钥?
我正在考虑使用PATCH请求进行部分对象更新,它们代表不同的意图:
- Null – >将此属性设置为null
- 缺少 – >未提供跳过属性
在javascript中,这是undefined和null之间的区别。
我现在提出的最好的方法是使用JObject
。
我有完全相同的问题,在研究期间我偶然发现了这个问题。
由于普遍的共识不满意,我创建了一个扩展的Nullable结构,我称之为Settable
只有在找到相应的属性时,反序列化器才会编写Settable
好极了!
我将实现上传到Github上的存储库,供大家使用(不保修,使用风险自负等等……我在医院里有6根肋骨断裂和止痛药:如果有什么不起作用,那就是你的错):
https://github.com/alberto-chiesa/SettableJsonProperties
编辑:至于关于未定义序列化为null的注释,我添加了一个自定义ContractResolver来处理Settable属性并更新了存储库。
这里的答案似乎就是你所追求的: https : //stackoverflow.com/a/21820736/39532
基本摘要是:
- JSON不直接支持undefined,因为不设置属性在function上是等效的
- Null可以用
new JValue((object)null)
表示new JValue((object)null)