如何使用 JSON.net 枚举嵌套的 JObject?

How do I enumerate nested JObject using JSON.net?

我有一个字符串化的 json 对象,我使用 JSObject.Parse 解析它并得到以下结果 -

{{
   "payload": {
       "firstName": "John",
       "lastName": "Doe"
    }
}}

这是我的输入 -

"{ \r\n\"payload\": {\r\n\t\"firstName\":\"John\", \r\n\t\"lastName\": \"Doe\"\r\n }}"

额外的括号是解析器添加的开始和结束。我想遍历此对象并显示名字和姓氏的键值。

foreach (var property in jobject)
{
    Console.WriteLine("  {0}: {1}", property.Name, property.Value);
}

但是,我不知道是因为两个括号还是因为嵌套结构我无法访问其中的属性。我尝试了一种递归方法来解析 json 但还没有成功。有人可以帮我解决这个问题吗?

您可以使用 LINQ 访问对象。如果不对,请将解析对象的部分添加到问题中。

yourobj["payload"].ToObject<YourObject>()

如果你也想迭代所有嵌套对象,你可以这样做:

var p = JObject.Parse(...);
foreach (var a in p.DescendantsAndSelf())
{
    if (a is JObject obj)
        foreach (var prop in obj.Properties())
            if (!(prop.Value is JObject) && !(prop.Value is JArray))
                Console.WriteLine("  {0}: {1}", prop.Name, prop.Value);
}