C#json反序列化对象继承

本文关键字:继承 对象 反序列化 C#json | 更新日期: 2023-09-27 18:28:39

我有一个Parent类和一个Child类,json字符串包含Child类的属性,但当我执行DeserializeObject时,我无法获得这些属性,因为Child成为了Parent。

例如:

class Data {
    public List<Parent> Parents;
}
class Parent {
    public string Foo;
}
class Child : Parent {
    public string Bar;
}
var data = new Data { Parents = new List<Parent> { new Child{Bar = "a"} } };
Console.WriteLine(data.Parents.Count); // <= it prints 1
Console.WriteLine(data.Parents.OfType<Child>().Count()); // <= it prints 1
var dataJson = JsonConvert.SerializeObject(data);
data = JsonConvert.DeserializeObject<Data>(dataJson);
Console.WriteLine(data.Parents.Count); // <= it prints 1
Console.WriteLine(data.Parents.OfType<Child>().Count()); // <= it prints 0 instead of 1

我该怎么办?Newtonsoft.Json能做我想做的事吗?

C#json反序列化对象继承

使用JsonSerializerSettings' TypeNameHandling

var settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };
var dataJson = JsonConvert.SerializeObject(data, settings);
data = JsonConvert.DeserializeObject<Data>(dataJson, settings);