当前位置: 首页 > 面试题库 >

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

爱唯
2023-03-14
问题内容

我将反序列化的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; }

}

```

最好的情况是什么?


问题答案:
  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类型尽可能接近实际数据。



 类似资料:
  • 问题内容: 显然,被序列化为对象数组(例如)。是否可以将其序列化为一个对象(例如)? 问题答案: 尽管我同意JavaScriptSerializer是胡扯,而Json.Net是更好的选择,但是您可以通过一种方法使JavaScriptSerializer序列化所需的方式。您将必须注册一个转换器,并使用如下方法覆盖Serialize方法: 希望这可以帮助!

  • 问题内容: 我是C ++的新手。使用序列化和反序列化类型数据的最简单方法是什么。我发现了一些使用示例,但它们对我来说是晦涩的。 问题答案: 请注意,将键解释为路径,例如,将对“ ab” =“ z”放置将创建{“ a”:{“ b”:“ z”}} JSON,而不是{“ ab”:“ z”} 。否则,使用是微不足道的。这是一个小例子。

  • 问题内容: 我正在使用JavaScriptSerializer将对象序列化到文件为JSON格式。但是结果文件没有可读的格式。如何允许格式化以获取可读文件? 问题答案: 似乎没有内置的工具可以格式化JSON-serializer的输出。 我认为发生这种情况的原因是使我们通过网络发送的数据最少。 您确定需要代码中的格式化数据吗?还是只想在调试期间分析JSON? 有很多的在线服务,提供这样的功能:1,2

  • 问题内容: 我在反序列化以下json数组时遇到麻烦(对不起,大小): 如果将其粘贴到json-viewer中,则会得到以下结构: 现在,包含具有坐标的数组的数组具有可变大小。所以我想在Java中,整个对象应该是一个数组,其中包含数组的集合,每个数组都包含一个。就像是 但是gson不接受这一点。我收到以下错误消息: 这似乎很奇怪,因为对我来说好像不像一个数组。但这可能使我感到困惑,或多或少地迷路了…

  • 我收到来自第3方服务提供商的JSON响应,其中包含一系列对象。当我尝试使用Jackson api反序列化JSON时。我收到以下异常 我的回答是 我的POJO课是这样的 我正在尝试使用以下代码反序列化JSON 如果我试着去做 它在BEGIN_对象本身失败。 如何使用数组读取和反序列化JSON。我应该编写自己的反序列化器吗? 编辑如果我使用JSON字符串而不是流,那么我就能够取回所有Java对象。但为

  • 我目前正在开发一个Java web应用程序,它使用Magento REST API公开的JSON数据。api返回的数据示例如下: 我的应用程序中有一个Java类,如下所示: 我想对数据进行反序列化,并将其转换为,但我总是得到以下错误: 这是我用来将JSON响应反序列化为ArrayList的语句行: 有人能分享一些见解吗?我看到一些例子,返回的JSON对象前面没有任何ID。那是因为我做错了什么吗?非