我无法找到从 JObject 获取 json 数组列表的正确方法。
_name数组内的元素应等于foo。
这是示例 json:
{
"doc": [{
"bob": [{
"tom": [{
"frank": [{
"category": [{
"_name": "foo",
"letters": "abc"
},
{
"_name": "foo",
"letters": "def"
},
{
"_name": "foo",
"letters": "ghi"
},
{
"_name": "foo",
"letters": "jkl"
}]
}]
}]
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我的代码:
JObject o = JObject.Parse(File.ReadAllText(@"D:/Client/data.json"));
var results = from x in o["doc"].Children()
where x["_name"].Value<string>() == "foo"
select x;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
"Value cannot be null.\r\nParameter name: source"
Run Code Online (Sandbox Code Playgroud)
如何获得一个列表,其中每个元素都是包含“_name”和“字母”的数组?
三个问题:
doc,你想要后代。x["_name"].Value<string>()即使没有财产_name,您也在使用x["_name"].Value<string>()你甚至在非对象儿童上使用不过,这些都很容易解决:
var doc = (JContainer) o["doc"];
var results = doc.Descendants()
.OfType<JObject>()
.Where(x => x["_name"] != null &&
x["_name"].Value<string>() == "foo");
Run Code Online (Sandbox Code Playgroud)