Я только что обновил свою версию 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");
оба свойства 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;
}
}
Это проект разумного размера, в котором много используется процесс сериализации, я не хочу проходить код, добавляя эти атрибуты к каждому классу и члену.
Есть ли способ обойти это?