2015-01-16 34 views
4

我需要得到JObject的第一個孩子。 這是我第一次迭代後用foreach循環打破的方式臨時解決的。如何讓JObject的第一個孩子不使用foreach循環

foreach (KeyValuePair<string, JToken> item in (JObject)json["stats"]) 
{ 
    // doing something with item 
    break; 
} 

我不知道是否有更短的解決方案,如json["stats"][0](但它不這樣工作)。

回答

3

可能有幾種方法,但這裏有一個:

JToken prop = obj["stats"].First; 

如果你知道這是一個JProperty

JProperty prop = obj["stats"].First.ToObject<JProperty>(); 
+0

我認爲這是最好的答案,因爲它使用本地方法和不需要LINQ擴展。但是,要獲得實際物品,需要投射。 'JObject item =(obj [「stats」]。首先作爲JProperty)。值作爲JObject'如果別人需要它,你可以更新你的答案。 – stil

+0

@stil:如果你知道*它是'JProperty',那麼一個小清潔器就是'obj [「stats」]。First.ToObject ().Value'。 –

1

這不工作?

(json["stats"] as JObject).Select(x => 
     { 
      // do something with the item; 

      return x; 
     }).FirstOrDefault(); 
2

由於JObject實現IDicionary<string, JToken>你可以使用LINQ擴展方法。

IDictionary<string, JToken> json = new JObject(); 
var item = json.First();