我是 Json.NET 新手,并尝试使用SelectToken函数。
我的测试 JSON:
{
"Root": {
"aNode": {
"bNode": {
"cNode": {
"id": "myID1"
}
},
"cNode": {
"id": "myID2"
},
"dNode": {
"cNode": [
{
"id": "myID3"
},
{
"id": "myID4"
}
]
}
},
"cNode": {
"id": "myID5"
}
}
}
现在,我尝试使用以下代码来获取特定对象:
JObject obj = JsonConvert.DeserializeObject<JObject>(jsonTxt);
//Not found
var myID1 = obj.SelectToken("..cNode[?(@.id=='myID1')]");
//Not found
var myID2 = obj.SelectToken("..cNode[?(@.id=='myID2')]");
//Found
var myID3 = obj.SelectToken("..cNode[?(@.id=='myID3')]");
//Found
var myID4 = obj.SelectToken("..cNode[?(@.id=='myID4')]");
//Not found
var myID5 = obj.SelectToken("..cNode[?(@.id=='myID5')]");
为什么我得到这些(对我来说)奇怪的结果?
我认为我应该在每种情况下都获得具有特定 ID 的 cNode
对象,而不仅仅是 myID3
和 myID4
.这是怎么回事?
我不确定你真正想要实现什么,但你可以使用 Linq 来获取 cNode
var nodes = obj.Descendants()
.OfType<JProperty>()
.Where(p => p.Name == "id")
.Select(p=>p.Parent)
.ToList();