2013-09-05 92 views
1

我有一个简单的JSON文件,我需要得到一个标记的值,我试过使用SelectToken,但问题是元素的名称是动态的。这是我的JSON文件Json.Net:使用SelectToken在不知道元素名称的情况下获取值?

{ 
    "name": "testdata", 
    "items": { 
     "myItemName": { 
      "located": true 
     } 
    } 
} 

我需要的“定位”(上)的值,如果你看到的元素名称“myItemName”,这是动态的,而不是固定的。所以我尝试使用SelectToken的点符号。

我想出了类似的话,但没有奏效 - 问题是,[0]

 bool located = (bool)jsonObject.SelectToken("items.[0].located"); 

内的物品,可以有超过1个动态元素,因此,例如,这是有效。

{ 
     "name": "testdata", 
     "items": { 
      "myItemName": { 
       "located": true 
      }, 
      "myOtherItemName": { 
       "located": true 
      } 
     } 
    } 

所以上面看,你可以看到我有“myItemName”和“myOtherItemName”,我想用somekind的的foreach

这是在所有获得的每一个“位于”的价值观可能吗?使用SelectToken?

感谢

回答

4

试试这个:

string json = @" 
{ 
    ""name"": ""testdata"", 
    ""items"": { 
     ""myItemName"": { 
      ""located"": true 
     }, 
     ""myOtherItemName"": { 
      ""located"": true 
     } 
    } 
}"; 

JObject jsonObject = JObject.Parse(json); 

foreach (JProperty prop in jsonObject.SelectToken("items")) 
{ 
    string name = prop.Name; 
    bool value = (bool)prop.Value.SelectToken("located"); 
    Console.WriteLine(name + " = " + value); 
} 

输出:

myItemName = True 
myOtherItemName = True 
相关问题