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

时间:2016-08-09 21:26:31

标签: c# json json.net

我试图反序列化一个奇怪的复杂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#类时的问题是响应列表中有一个Response对象和一个Response列表。

这是我的班级结构:

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);

响应是来自Web请求的字符串。

我只想弄清楚如何将这个奇怪的JSON映射到C#类。我已经尝试了很多不同的类结构,但似乎无论如何都会得到相同的异常。我也尝试了c#类生成器,但它们没有为这个特定的JSON提供合适的输出。感谢任何输入!谢谢!

1 个答案:

答案 0 :(得分:1)

您的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'
        }]
    }
}