一尘不染

使用JavaScriptSerializer()反序列化JSON文件

json

我将反序列化的json文件的结构如下所示;

{
    "id" : "1lad07",
    "text" : "test",
    "url" : "http:\/\/twitpic.com\/1lacuz",
    "width" : 220,
    "height" : 84,
    "size" : 8722,
    "type" : "png",
    "timestamp" : "Wed, 05 May 2010 16:11:48 +0000",
    "user" : {
        "id" : 12345,
        "screen_name" : "twitpicuser"
    }
}

我创建了一个类,该类具有文件名作为JavaScriptSerializer的属性。我将用于反序列化json的代码如下;

```
using (var reader = new StreamReader(twitpicResponse.GetResponseStream())) {

                var responseBody = reader.ReadToEnd();
                var deserializer = new JavaScriptSerializer();
                var results = deserializer.Deserialize<Response>(responseBody);

            }

我的问题是如何读取json文件中的用户字段。如下所示;


"user" : {
    "id" : 12345,
    "screen_name" : "twitpicuser"
}

它具有子属性和值。如何在我的Response类中为它们命名。我的回应类别现在看起来像这样;


public class Response {

    public string id { get; set; }
    public string text { get; set; }
    public string url { get; set; }
    public string width { get; set; }
    public string height { get; set; }
    public string size { get; set; }
    public string type { get; set; }
    public string timestamp { get; set; }

}

```

最好的情况是什么?


阅读 266

收藏
2020-07-27

共1个答案

一尘不染

  1. 您需要创建一个包含用户值的类,就像response class一样User
  2. 将属性添加到具有用户值的新类的类型的Response类’user’中User
        public class Response {

        public string id { get; set; }
        public string text { get; set; }
        public string url { get; set; }
        public string width { get; set; }
        public string height { get; set; }
        public string size { get; set; }
        public string type { get; set; }
        public string timestamp { get; set; }
        public User user { get; set; }

    }

    public class User {

        public int id { get; set; }
        public string screen_name { get; set; }

    }

通常,您应该确保json的属性类型与CLR类匹配。
您尝试反序列化的结构似乎包含多个数字值(很可能是int)。我不确定JavaScriptSerializer能否将数字反序列化为字符串字段,但是无论如何,您都应尝试使CLR类型尽可能接近实际数据。

2020-07-27