反序列化由各种模型组成的 JSON C#

问题描述

我正在尝试研究如何反序列化可以由单个或多个模型组成的 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)

在这种情况下,您必须进行大量编码以探测元素是否存在并提取值。