NewtonSoft JArray 两层深度提取以在 C# 中列出

NewtonSoft JArray two levels deep to extract to list in C#

我有以下代码:

JObject obj = JObject.Parse(jsonString);
var jarr = obj["data"].Value<JArray>();            
List<Person> lst = jarr.ToObject<List<Person>>();
Console.WriteLine("{0}, {1}", lst[0].Name, lst[1].Age);

哪个有效。但我现在需要在 json 中深入两层:

..."data":[{"moredata":...

我正在尝试以下操作,但出现错误:

JObject obj = JObject.Parse(jsonString);
var jarr = obj["data"]["moredata"].Value<JArray>();  //  This is not working to go two levels deep        
List<Person> lst = jarr.ToObject<List<Person>>();
Console.WriteLine("{0}, {1}", lst[0].Name, lst[1].Age);

如能为上面的行指定正确的语法以在 json.

中深入两层,我们将不胜感激。

这是 json 数据的格式。我想删除整个“moredata”级别,因为它不是 Person class:

的一部分
{
    "data": [{
            "moredata": {
                "first_name": "Bob",
                "last_name": "Smith"
            }
        }, {
            "moredata": {
                "first_name": "Albert",
                "last_name": "Rodgers"
            }
        }, {
            "moredata": {
                "first_name": "Dan",
                "last_name": "Anderson"
            }
        }
    ]
}

根据您的 JSON 样本,以下是您获取人员列表的方式:

JObject obj = JObject.Parse(jsonString);
var jarr = obj["data"].Value<JArray>();       
List<Person> lst = jarr.Select(a => a["moredata"].ToObject<Person>()).ToList();

换句话说,您可以像最初那样检索数组。然后,对于数组中的 每个项目 ,您要降低一个级别并将其转换为一个人。然后将所有这些人放入一个列表中。

此处演示:https://dotnetfiddle.net/xtp34E