如何访问 Json 对象的内部属性?

时间:2021-02-09 07:12:48

标签: c# json

我正在学习 C#,我正在尝试解析 json/xml 响应并检查每个键和值对。对于 xml,我正在转换为 json,所以我只有一个函数/脚本可以处理这两种情况。我的问题是我正在处理各种不相似的 json 响应,并且某些 json 响应中可能有数组。我曾尝试访问 json 对象的“计数”作为检查数组的一种方式。

注意:响应会有所不同。此示例适用于产品 > 产品 > 名称、数量和类别。下一个响应将发生变化,可以是 Country > State > Cities 等。我不能依赖于创建类,因为所有的响应都会有所不同。另外,我正在努力使其自动化,因此它应该能够处理任何扔给它的东西。

我正在使用的示例 Json:

{
  "products": {
    "product": [
      {
        "name": "Dom quixote de La Mancha",
        "quantity": "12",
        "category": "Book"
      },
      {
        "name": "Hamlet",
        "quantity": "3",
        "category": "Book"
      },
      {
        "name": "War and Peace",
        "quantity": "7",
        "category": "Book"
      },
      {
        "name": "Moby Dick",
        "quantity": "14",
        "category": "Book"
      },
      {
        "name": "Forrest Gump",
        "quantity": "16",
        "category": "DVD"
      }
    ]
  }

我访问计数、名称和值的方式如下:

dynamic dyn = JsonConvert.DeserializeObject<dynamic>(jsonText);
foreach (JProperty property in dyn.Properties())
{
    string propname = property.Name;
    var propvalue = property.Value;
    int count = property.Count;
}

有没有办法不用像 int count = dyn.Count 这样的 foreach 循环来访问这些?我从中得到的只是 null 而不是实际值。

对于上面的例子,我的最终结果是这样的: 此响应包含产品> 产品> 5 x(名称、数量、类别)

对象的 QuickWatch: QuickWatch for dyn object

1 个答案:

答案 0 :(得分:0)

尝试将您的 JSON 反序列化为 JObject,如下所示:

var jObject = JsonConvert.DeserializeObject<JObject>(jsonText);