我正在使用来自第三方的API,该API根据有多少结果从同一端点返回不同的JSON结果。如果只有一个结果,则响应为:
{
"data": {
...
},
"metadata": {
...
}
}
但是,如果结果有多个,则响应为:
{
"items": [{
"data": {...},
"metadata": {...}
}, {
"data": {...},
"metadata": {...}
}],
"metadata": {...}
}
我正在使用C#和Json.Net,无法弄清楚如何动态处理这种混合响应。有没有办法用Json.net反序列化这些响应?
答案 0 :(得分:1)
为什么不写这样的东西:
public class root
{
public Item data { get; set; }
public IList<Item> items { get; set; }
public MetaData metadata { get; set; }
}
然后在处理
时检查items
或data
是否为空
答案 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>();
}