Json.NET需要反序列化的所有属性
发布时间:2020-12-16 19:49:11 所属栏目:百科 来源:网络整理
导读:在Json.NET中,如何在反序列化时使所有属性成为必需?我知道我可以使用消息上的属性来执行此操作,但我不想这样做.主要是因为它需要我的消息库来承担外部依赖. 我尝试了MissingMemberHandling.Error设置,但它与我想要的相反.我对JSON有额外的属性没关系.我希望
在Json.NET中,如何在反序列化时使所有属性成为必需?我知道我可以使用消息上的属性来执行此操作,但我不想这样做.主要是因为它需要我的消息库来承担外部依赖.
我尝试了MissingMemberHandling.Error设置,但它与我想要的相反.我对JSON有额外的属性没关系.我希望它在JSON中缺少任何目标对象属性时失败. 我实际上反序列化为F#记录,无论如何,属性通常不能为null. (它们不能通过代码中的常规方式赋值为null.)但是当数据丢失时,Json.NET很乐意将属性默认为null. 接受答案的F#版本 分解器 open System open Newtonsoft.Json open Newtonsoft.Json.Serialization type RequireAllPropertiesContractResolver() = inherit DefaultContractResolver() override me.CreateObjectContract(objectType:Type) = let contract = base.CreateObjectContract(objectType) contract.ItemRequired <- new Nullable<Required>(Required.Always) contract 在设置中 let settings = new JsonSerializerSettings() // default settings ... settings.ContractResolver <- new RequireAllPropertiesContractResolver()
将属性
[JsonObject(ItemRequired=Required.Always)] 添加到您的类:
Required的可能值为:
该设置是继承的,因此可以添加到通用基类中. 更新 要对所有对象进行全局操作,请将 public class RequireObjectPropertiesContractResolver : DefaultContractResolver { protected override JsonObjectContract CreateObjectContract(Type objectType) { var contract = base.CreateObjectContract(objectType); contract.ItemRequired = Required.Always; return contract; } } 然后,在设置中: var settings = new JsonSerializerSettings { ContractResolver = new RequireObjectPropertiesContractResolver() }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |