Json.Net序列化子类中的重写属性没有问题。
public override ICollection<Person> Persons { get; set; }
但是如果我尝试在属性上使用new
,则序列化失败。没有例外; Persons
永远不会被序列化。
public new ICollection<Person> Persons { get; set; }
这是为什么?
(这个例子没有多大意义,我知道。这只是一个例子。后来的目标是能够改变属性public new ICollection<PersonDto> Persons { get; set; }
的数据类型)
答案 0 :(得分:2)
我发现了一种更简单的解决方法,无需创建自定义JsonConverter
如果将属性JsonProperty
放在属性上,它就可以工作。
[JsonProperty]
public new ICollection<PersonDto> Persons { get; set; }
我不知道为什么Json.Net需要这个属性。通常它会将未使用JsonIgnore
修饰的所有内容序列化。如果有人知道,欢迎您发表评论。
答案 1 :(得分:1)
如果你想这样做是因为你想指定Person
序列化到JSON的确切程度,我认为更好的解决方案是使用自定义JsonConverter
。转换器看起来像这样:
class PersonConverter : JsonConverter
{
public override void WriteJson(
JsonWriter writer, object value, JsonSerializer serializer)
{
var person = (Person)value;
serializer.Serialize(
writer,
new
{
Name = person.LastName,
Age = (int)(DateTime.Now - person.BirthDate).TotalDays / 365
});
}
public override object ReadJson(
JsonReader reader, Type objectType, object existingValue,
JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(Person);
}
}
然后您可以像这样使用它:
JsonConvert.SerializeObject(yourObject, new PersonConverter())