9

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

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

...................................................

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

但是,如果我将根对象泛化为创建父类然后从它继承,那么反序列化后我会得到 null !!!

[Serializable]
    public class RootObject
    {
        public int count { get; set; }
        public Pagination pagination { get; set; }
    }

[Serializable]
    public class MoviesListRootObject:RootObject
    {
        public List<MovieResponse> movieResponse { get; set; }

    }

..................................................

 var json = wc.DownloadString(jsonRequestURL);
 var rootObj = JsonConvert.DeserializeObject<MoviesListRootObject>(json);
4

2 回答 2

4

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 对象初始化程序,这对您很重要。

于 2014-01-14T10:06:44.397 回答
0

假设 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> 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。

于 2012-12-05T10:44:30.660 回答