如果我事先不知道密钥,如何解析C#中的JSON对象?

Nat*_*itt 18 c# json json.net

我有一些看起来像这样的JSON数据:

{
  "910719": {
    "id": 910719,
    "type": "asdf",
    "ref_id": 7568
  },
  "910721": {
    "id": 910721,
    "type": "asdf",
    "ref_id": 7568
  },
  "910723": {
    "id": 910723,
    "type": "asdf",
    "ref_id": 7568
  }
}
Run Code Online (Sandbox Code Playgroud)

我如何使用JSON.net解析这个?我可以先这样做:

JObject jFoo = JObject.Parse(data);
Run Code Online (Sandbox Code Playgroud)

我需要能够遍历此列表中的每个对象.我希望能够做到这样的事情:

foreach (string ref_id in (string)jFoo["ref_id"]) {...}
Run Code Online (Sandbox Code Playgroud)

要么

foreach (JToken t in jFoo.Descendants())
{
    Console.WriteLine((string)t["ref_id"]);
}
Run Code Online (Sandbox Code Playgroud)

但当然这不起作用.如果您在编写代码时知道密钥,那么所有示例都能很好地工作.如果您事先不知道密钥,它会崩溃.

Tru*_*ill 22

这是可行的; 这可行,但它并不优雅.我相信有更好的方法.

var o = JObject.Parse(yourJsonString);

foreach (JToken child in o.Children())
{
    foreach (JToken grandChild in child)
    {
        foreach (JToken grandGrandChild in grandChild)
        {
            var property = grandGrandChild as JProperty;

            if (property != null)
            {
                Console.WriteLine(property.Name + ":" + property.Value);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

打印:

id:910719
type:asdf
ref_id:7568
id:910721
type:asdf
ref_id:7568
id:910723
type:asdf
ref_id:7568