c# - JSON.NET 解析嵌套数据类型

标签 c# json.net

我是 JSON.NET 新手,并且一直在使用最近发布的新 Marvel API。

当我调用此 API 时,它将返回以下 JSON 数据结构:-

{  
    "code": 200,   
    "status": "Ok",   
    "etag": "f0fbae65eb2f8f28bdeea0a29be8749a4e67acb3",   
    "data": 
    {     
        "offset": 0,    
        "limit": 20,     
        "total": 30920,     
        "count": 20,     
        "results": [{array of objects}}]  
    } 
}

我可以像这样为此数据创建类:

public class Rootobject
{
    public int code { get; set; }
    public string status { get; set; }
    public string etag { get; set; }
    public Data data { get; set; }
}

public class Data
{
    public int offset { get; set; }
    public int limit { get; set; }
    public int total { get; set; }
    public int count { get; set; }
    public Result[] results { get; set; }
}

public class Result
{

}

现在,我的问题。从 API 返回的结果可以与不同的对象相关,它可能是与角色、漫画、系列等相关的结果。这些对象都拥有不同的属性。

我需要能够根据结果相关的实体类型交换结果类属性?

这真的可以做到吗?

最佳答案

您可以使用var jObj = JObject.Parse(jsonString),然后通过对象上可用的属性来发现它是什么对象类型。

jObj["someComicSpecificProperty"] != null

但这并不是完整的证明,需要在结果数组的每个对象的基础上完成。

我见过人们使用的另一种方法是在对象上有一个属性“typeName”。

但是,此问题的根本原因是您尝试对非强类型的属性进行强类型化。我真的建议将这些不同类型的结果分成不同的属性,这样您就不会遇到此问题。

关于c# - JSON.NET 解析嵌套数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21830628/

相关文章:

c# - C# 如何评估数组循环 boolean 相等性?

c# - ASP.NET无法使用itext7下载PDF(但可以保存到磁盘)

c# - 如何在不使用 foreach 循环的情况下获取 JObject 的第一个子对象

c# - Json.NET 不在对象的列表或字典中保留原始类型信息。有解决方法吗?

json - 如何使用嵌套字典反序列化 json?

c# - 按出现次数对 IEnumerable 进行排序

C# 奇怪的索引越界异常

c# - 我没有 SqlServerCe 程序集?

c# - 如何将对象数组转换为 json

c# - 如何反序列化包含分隔 JSON 的 JSON?