2013-08-21 26 views
2

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

例如:

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可以设法做我想做的事情?

回答

4

使用JsonSerializerSettings' TypeNameHandling

var settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All }; 

var dataJson = JsonConvert.SerializeObject(data, settings); 
data = JsonConvert.DeserializeObject<Data>(dataJson, settings); 
+0

感谢,但它的伎俩:)。 – Falydoor