使用Json.net反序列化是否有一种方法可以区分空值和未提供的值,即缺少密钥?
我正在考虑使用PATCH请求进行部分对象更新,它们代表不同的意图:
在javascript中,这是undefined和null之间的区别.
我现在想出的最好的就是使用JObject
.
我有完全相同的问题,我在研究期间偶然发现了这个问题.
由于普遍的共识不满意,我创建了一个扩展的Nullable结构,我称之为Settable <T>,因为缺乏想象力.基本上它是一个可空的附加字段,IsSet,无论你存储哪个值,只要你存储了一些东西就是真的,只有默认值为假(Settable <T>),其别名为Settable <T>.未定义.
只有在找到相应的属性时,反序列化器才会写入Settable <T>,在这种情况下,IsSet将为true.如果该属性未包含在反序列化的json中,则将保留默认值,其中IsSet == false.那么,替换你的int?具有Settable的DTO类型中的属性将为您提供undefined(或更确切地说,未指定)和null之间所需的差异.
好极了!
我将实现上传到Github上的存储库,供大家使用(不保修,使用风险自负等等......我在医院里有6个肋骨断裂和止痛药:如果有什么不起作用,那就是你的错):
https://github.com/alberto-chiesa/SettableJsonProperties
编辑:至于关于未定义序列化为null的注释,我添加了一个自定义ContractResolver来处理Settable属性并更新了存储库.
归档时间: |
|
查看次数: |
3464 次 |
最近记录: |