Csharp/C#教程:升级NewtonSoft JSON.NET不会隐式序列化受保护的成员分享


升级NewtonSoft JSON.NET不会隐式序列化受保护的成员

我刚刚将我的NewtonSoft JSON.NET版本从3.0.0更新到3.5.0,我注意到受保护的成员没有被隐式序列化。

我有以下课程:

public class SimpleFileContainer : IDto { public virtual string Name { get; protected set; } public virtual string Path { get; protected set; } public SimpleFileContainer(string name, string path) { Name = name; Path = path; } } 

以下测试代码未通过

 var json = JsonConvert.SerializeObject(new SimpleFileContainer("Name", "Path")); var deserialised = JsonConvert.DeserializeObject(json); Assert.That(deserialised.Name, Is.EqualTo("Name"); 

除非我将属性设置为public或添加更新具有以下属性的类,否则Name和Path属性都为null:

 [JsonObject(MemberSerialization.OptOut)] public class SimpleFileContainer : IDto { [JsonProperty] public virtual string Name { get; protected set; } [JsonProperty] public virtual string Path { get; protected set; } public SimpleFileContainer(string name, string path) { Name = name; Path = path; } } 

这是一个使用序列化过程的合理大小的项目,我不想通过代码将这些属性添加到每个类和成员。

这有什么办法吗?

我今天遇到了同样的问题。 幸运的是Ayende得到了修复,我正在和你分享。 配置序列化程序时,更改ContractResolver上的DefaultMembersSearchFlags属性:

上述就是C#学习教程:升级NewtonSoft JSON.NET不会隐式序列化受保护的成员分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 var serializer = new JsonSerializer { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, ContractResolver = new DefaultContractResolver { DefaultMembersSearchFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance }, TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple, ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor }; 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1020778.html

(0)
上一篇 2022年1月5日
下一篇 2022年1月5日

精彩推荐