我是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
。这有什么不对?
答案 0 :(得分:2)
我不确定你真正想要实现的目标,但你可以使用Linq来获取cNodes
var nodes = obj.Descendants()
.OfType<JProperty>()
.Where(p => p.Name == "id")
.Select(p=>p.Parent)
.ToList();