升级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