升级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属性:

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