反序列化可能是数组或单个项的JSON

时间:2016-02-11 01:12:06

标签: c# json json.net

我正在使用来自第三方的API,该API根据有多少结果从同一端点返回不同的JSON结果。如果只有一个结果,则响应为:

{
  "data": {
  ...
  },
  "metadata": {
  ...
  }
}

但是,如果结果有多个,则响应为:

{
    "items": [{
        "data": {...},
        "metadata": {...}
    }, {
        "data": {...},
        "metadata": {...}
    }],
    "metadata": {...}
}

我正在使用C#和Json.Net,无法弄清楚如何动态处理这种混合响应。有没有办法用Json.net反序列化这些响应?

2 个答案:

答案 0 :(得分:1)

为什么不写这样的东西:

public class root 
{
    public Item data { get; set; }
    public IList<Item> items { get; set; }
    public MetaData metadata { get; set; }
}

然后在处理

时检查itemsdata是否为空

答案 1 :(得分:1)

JSON.net拥有与JObject相关的类,这些类在性质上稍微不那么严格且有点动态。这允许您(例如):

var item = JObject.Parse(jsonText);
var hasItems = item.Properties().Any(p => p.Name == "items");
if(hasItems)
{
    var items = item["items"].Select(t => t.ToObject<SomeClass>());
}
else
{
    var sc = item.ToObject<SomeClass>();
}