2

親クラスと子クラスがあり、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

1 に答える 1

5

使用するJsonSerializerSettings' TypeNameHandling

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

var dataJson = JsonConvert.SerializeObject(data, settings);
data = JsonConvert.DeserializeObject<Data>(dataJson, settings);
于 2013-08-21T13:20:56.770 に答える