C# NewtonSoft JSON.NET的升级未隐式序列化受保护的成员

C# NewtonSoft JSON.NET的升级未隐式序列化受保护的成员,c#,json.net,C#,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 SimpleFileCont

我刚刚将我的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<SimpleFileContainer >(json);

Assert.That(deserialised.Name, Is.EqualTo("Name");
这是一个规模合理的项目,大量使用序列化过程,我不想详细介绍将这些属性添加到每个类和成员的代码


有办法解决这个问题吗?

我今天也遇到了同样的问题。幸运的是,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
                        };

此设置还序列化字段。不仅仅是财产。
var serializer = new JsonSerializer
                        {
                            ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
                            ContractResolver = new DefaultContractResolver
                                {
                                    DefaultMembersSearchFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance
                                },
                            TypeNameAssemblyFormat = FormatterAssemblyStyle.Simple,

                            ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor
                        };