为什么JSON.NET在反序列化时不使用inheritance

我通过使用以下类正常将JSON字符串反序列化为根对象。

[Serializable] public class MoviesListRootObject { public int count { get; set; } public Pagination pagination { get; set; } public List response { get; set; } } 

……………………………..

 var json = wc.DownloadString(jsonRequestURL); var rootObj = JsonConvert.DeserializeObject(json); 

但是如果我概括了创建父类的根对象bt然后inheritance它,那么在反序列化后我得到null!

 [Serializable] public class RootObject { public int count { get; set; } public Pagination pagination { get; set; } } [Serializable] public class MoviesListRootObject:RootObject { public List movieResponse { get; set; } } 

……………………………………….

  var json = wc.DownloadString(jsonRequestURL); var rootObj = JsonConvert.DeserializeObject(json); 

它非常简单,并且由json.net提供开箱即用的支持,您只需在序列化和反序列化时使用以下JsonSettings:

 JsonConvert.SerializeObject(graph, Formatting.None, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All, TypeNameAssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple }); 

对于Deserializing使用以下代码:

 JsonConvert.DeserializeObject(Encoding.UTF8.GetString(bData), type, new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All }); 

只需记下JsonSerializerSettings对象初始化程序,这对您很重要。

假设json字符串如下所示

 {"movieResponse":[{"Rating":"Good"}],"count":1,"pagination":{"PageIndex":1}} 

我发现它适用于我。 我目前正在使用Json.net 4.5 r11

如果你是类结构的序列化对象

 [Serializable] public class MoviesListRootObject { public int count { get; set; } public Pagination pagination { get; set; } public List response { get; set; } } 

json字符串看起来像下面的东西

 {"count":1,"pagination":{"PageIndex":1},"response":[{"Rating":"Good"}]} 

现在您使用新结构进行反序列化,然后您将获得null movieResponse因为在新结构中更改了属性。

要解决此问题,请创建一个从JsonConverter派生的新自定义jsonConverter,并以编程方式创建对象。 请查看json-deserialization-with-jsonnet-class链接以获得一些想法。 如果你已经知道这个并且问题仍然存在,那么请更新问题更详细,如使用的Json.net版本,json字符串,完整的类结构等

HTH。