使用包含两个对象的列表反序列化JSON,其中一个是该对象的列表

本文关键字:对象 列表 一个 JSON 包含两 反序列化 | 更新日期: 2023-09-27 18:01:29

我试图反序列化一个奇怪的复杂json字符串,但有问题。我得到一个异常:

无法将当前JSON数组(例如[1,2,3])反序列化为类型'Response',因为该类型需要一个JSON对象(例如{"name":"value"})

Json是这样的

{  
   "success":true,
   "error":null,
   "response":{  
      "responses":[  
         {  
            "success":true,
            "error":null,
            "response":{  
               "ob":{  
                  "icon":"sunny.png",
                  "weatherShort":"Sunny"
               }
            },
            "request":"requeststring"
         },
         {  
            "success":true,
            "error":null,
            "response":[  
               {  
                  "indice":{  
                     "current":{  
                        "dateTimeISO":"2016-08-09T10:00:00-05:00",
                        "indexENG":"dry"
                     }
                  }
               }
            ],
            "request":"requeststring"
         }
      ]
   }
}

尝试创建c#类的问题是,在响应列表中有一个响应对象和一个响应列表。

下面是我的类结构:
public class Responses
{
    public bool success { get; set; }
    public object error { get; set; }
    public Response response { get; set; }
    public List<Response> responses { get; set; }
    public string request { get; set; }
}
public class Indice
{
    public Current current { get; set; }
}
public class Current
{
    public string indexENG { get; set; }
    public string dateTimeISO { get; set; }
}
public class Ob
{
    public string icon { get; set; }
    public string weatherShort { get; set; }
}
public class Response
{
    public List<Responses> responses { get; set; }
    public Indice indice { get; set; }
    public Ob ob { get; set; }
}
public class RootJsonObject
{
    public bool success { get; set; }
    public object error { get; set; }
    public Response response { get; set; }
}

我是否在这里做了一些完全错误的事情来处理响应列表与响应对象和响应列表?

如果有人想知道,下面是我对它的反序列化:

RootJsonObject obj = JsonConvert.DeserializeObject<RootJsonObject>(response);

response是来自web请求的字符串。

我只是想弄清楚如何将这个奇怪的JSON映射到c#类。我已经尝试了相当多的不同的类结构,但似乎得到同样的异常不管。我也尝试过c#类生成器,但它们不能为这个特定的JSON提供像样的输出。感谢任何意见!谢谢!

使用包含两个对象的列表反序列化JSON,其中一个是该对象的列表

JSON中有一个错误。数组中的第二个元素用方括号括着经典的花括号,就好像response是一个集合,但它不是。预计类型为Response:

{
    "success": true,
    "error": null,
    "response": [ <<<HERE {
        "indice": {
            "current": {
                "dateTimeISO": "2016-08-09T10:00:00-05:00",
                "indexENG": "dry"
            }
        }
    }] <<<HERE,
    "request": "requeststring"
}
最终,正确的JSON,你应该收到看起来像这样:
{
    'success': true,
    'error': null,
    'response': {
        'responses': [{
            'success': true,
            'error': null,
            'response': {
                'ob': {
                    'icon': 'sunny.png',
                    'weatherShort': 'Sunny'
                }
            },
            'request': 'requeststring'
        }, {
            'success': true,
            'error': null,
            'response': {
                'indice': {
                    'current': {
                        'dateTimeISO': '2016-08-09T10:00:00-05:00',
                        'indexENG': 'dry'
                    }
                }
            },
            'request': 'requeststring'
        }]
    }
}