问题描述
我正在尝试研究如何反序列化可以由单个或多个模型组成的 JSON 响应,例如,我有以下 URL 和来自该端点的响应:
https://api.site.com/products?query=fruit
哪个会返回这样的东西:
{
"fruit": [{ ... },{ ... }]
}
“水果”可以是任何东西,但作为替代,您也可以这样做:
https://api.site.com/products?query=fruit,pies
{
"fruit": [{ ... },{ ... }],"pies": [{ ... },{ ... }]
}
所以我知道如何只处理一次提供的“选择”之一,但是当同一响应中可以有 2 个单独的模型时,我该如何反序列化响应?
解决方法
如果您事先知道 json 模型(也称为数据契约),那么您可以创建一个专用类。因此,对于上述场景,类将是
public class AnyClassName
{
public List<Fruit> Fruit { get; set; }
public List<Pie> Pie { get; set; }
}
然后使用
Newtonsoft.Json.JsonConvert.DeserializeObject<AnyClassName>(jsonString)
如果您不知道数据合同,请使用
Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString)
在这种情况下,您必须进行大量编码以探测元素是否存在并提取值。