使用 C# 反序列化复杂的嵌套 JSON

Posted

技术标签:

【中文标题】使用 C# 反序列化复杂的嵌套 JSON【英文标题】:Deserialize complex nested JSON with C# 【发布时间】:2021-12-20 11:19:19 【问题描述】:

我想在 C# 中读取类似这样的 JSON。但我不知道如何从 JSON 中提取特定的块。


  "took": 32,
  "timed_out": false,
  "_shards": 
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  ,
  "hits": 
    "total": 
      "value": 263,
      "relation": "eq"
    ,
    "max_score": 29.078617,
    "hits": [
      
        "_index": "x",
        "_type": "_doc",
        "_id": "x",
        "_score": 29.078617,
        "_source": 
          "reference": "x",
          "locationList": [
            
              "country": "x",
              "address": "x",
              "city": "x",
              "postalCode": "x",
              "latitude": "x",
              "county": "x",
              "municipal": "x",
              "longitude": "x"
            
          ],
          "expires": "x",
          "businessName": "x",
          "employer":  "name": "x" ,
          "source": "x",
          "published": "x",
          "title": "x",
          "uuid": "x",
          "properties": 
            "applicationdue": "x",
            "employer": "x"
          ,
          "status": "ACTIVE"
        
      ,
      ....
如何解析第二个“点击”中的数据?

还没有找到任何关于如何在 JSON 中使用多个框的好读物,所以希望有经验的人会知道这个。谢谢。

【问题讨论】:

一个选项newtonsoft.com/json/help/html/QueryJsonSelectToken.htm “第二个hits”(它是一个数组)是“第一个hits”的一个属性。 “第一个hits”是您的***对象的属性。为了反序列化,构建一组与 JSON 结构匹配的类,并将所有内容反序列化为***类的实例 你可以从使用正确的词开始——你想解析(即你正在写一个解析器)还是你想反序列化(即您正在使用已经存在的库,例如 Newtonsoft)。 【参考方案1】:

你可以试试这样的

 var jsonResponse = JObject.Parse(yourJason);
 var jHits = (JArray)jsonResponse["hits"]["hits"]; //This way you'll get the second hits array.

【讨论】:

以上是关于使用 C# 反序列化复杂的嵌套 JSON的主要内容,如果未能解决你的问题,请参考以下文章

C# Newtonsoft.Json 解析多嵌套json 进行反序列化

如何反序列化包含同一类嵌套的json类(Unity C#)?

使用C# json 二维数组 反序列化

C# Newtonsoft.Json 解析多嵌套json 进行反序列化

将嵌套的 JSON 反序列化为 C# 对象

c# 多个json字符串反序列化