大佬教程收集整理的这篇文章主要介绍了如何在Json.NET中将缺少的属性反序列化为默认值?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一种“echo”服务,它返回作为响应发送给它的数据.因此,此服务接收具有缺少成员的JSON(或根据您的查看方式为null成员),然后将其发送回我的Json.NET客户端.通过fiddler(代理嗅探器)查看,线路上的JSON在两个方向上看起来都是一样的.到现在为止还挺好.
当原始Json.NET发送方收到JSON响应以反序列化它时,序列化程序抛出一个关于在JSON有效负载中找不到所需成员的异常:
required property 'IAmrequired' not found in JSON. Path ''.
这是不幸的,因为序列化程序因此无法反序列化它之前已经序列化的数据而没有问题.
如果没有更改DataContract类以使成员不需要(由于多种原因我不想这样做),有没有办法让Json.NET将缺少的成员反序列化为默认值,例如null?
这是我的反序列化代码:
Hasrequired h = null; JObject json = response as JObject; // hand waving here try { Jsonserializer ser = new Jsonserializer(); ser.MissingMemberHandling = MissingMemberHandling.Ignore; // doesn't seem to Help ser.DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate; // doesn't seem to Help ser.NullValueHandling = NullValueHandling.Include; // doesn't seem to Help h = json.ToObject<Hasrequired>(ser); } catch (Exception eX) { // bummer,missing required members still }
>您可以使用[JsonProperty(required = required.Default)]标记这些相同的属性.这是有效的,因为[JsonProperty]优先于Json.Net中的[DataMember].
[DataContract] public class Hasrequired { [DataMember(required = truE)] [JsonProperty(required = required.Default)] public String IAmrequired { get; set; } }
>或者,您可以创建一个自定义ContractResolver,以编程方式在每个属性上设置required = required.Default.
class CustomResolver : DefaultContractResolver { protected override JsonProperty CreateProperty(MemberInfo member,Memberserialization memberserialization) { JsonProperty prop = base.CreateProperty(member,memberserialization); prop.required = required.Default; return prop; } }
要使用解析程序,只需将序列化程序上的ContractResolver属性设置为自定义解析程序的新实例:
Jsonserializer ser = new Jsonserializer(); ser = new CustomResolver();
以上是大佬教程为你收集整理的如何在Json.NET中将缺少的属性反序列化为默认值?全部内容,希望文章能够帮你解决如何在Json.NET中将缺少的属性反序列化为默认值?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。