Iterazione su oggetti JSON in C #

Sto usando JSON.NET in C # per analizzare una risposta dall’API Klout. La mia risposta è così:

[ { "id": "5241585099662481339", "displayName": "Music", "name": "music", "slug": "music", "imageUrl": "http://kcdn3.klout.com/static/images/music-1333561300502.png" }, { "id": "6953585193220490118", "displayName": "Celebrities", "name": "celebrities", "slug": "celebrities", "imageUrl": "http://kcdn3.klout.com/static/images/topics/celebrities_b32741b6703151cc7bd85fba24c44c52.png" }, { "id": "5757029936226020304", "displayName": "Entertainment", "name": "entertainment", "slug": "entertainment", "imageUrl": "http://kcdn3.klout.com/static/images/topics/Entertainment_7002e5d2316e85a2ff004fafa017ff44.png" }, { "id": "3718", "displayName": "Saturday Night Live", "name": "saturday night live", "slug": "saturday-night-live", "imageUrl": "http://kcdn3.klout.com/static/images/icons/generic-topic.png" }, { "id": "8113008320053776960", "displayName": "Hollywood", "name": "hollywood", "slug": "hollywood", "imageUrl": "http://kcdn3.klout.com/static/images/topics/hollywood_9eccd1f7f83f067cb9aa2b491cd461f3.png" } ] 

Come vedi, contiene 5 tag id . Forse la prossima volta sarebbe 6 o 1 o qualche altro numero. Voglio scorrere il JSON e ottenere il valore di ogni tag id . Non riesco a fare un giro senza sapere quante persone ci saranno. Come posso risolvere questo?

 dynamic dynJson = JsonConvert.DeserializeObject(json); foreach (var item in dynJson) { Console.WriteLine("{0} {1} {2} {3}\n", item.id, item.displayName, item.slug, item.imageUrl); } 

o

 var list = JsonConvert.DeserializeObject>(json); public class MyItem { public string id; public string displayName; public string name; public string slug; public string imageUrl; } 

È ansible utilizzare JsonTextReader per leggere il JSON e iterare sui token:

 using (var reader = new JsonTextReader(new StringReader(jsonText))) { while (reader.Read()) { Console.WriteLine("{0} - {1} - {2}", reader.TokenType, reader.ValueType, reader.Value); } } 

Questo ha funzionato per me, convertito in JSON nidificato per leggere facilmente YAML

  string JSONDeserialized {get; set;} public int indentLevel; private bool JSONDictionarytoYAML(Dictionary dict) { bool bSuccess = false; indentLevel++; foreach (string strKey in dict.Keys) { string strOutput = "".PadLeft(indentLevel * 3) + strKey + ":"; JSONDeserialized+="\r\n" + strOutput; object o = dict[strKey]; if (o is Dictionary) { JSONDictionarytoYAML((Dictionary)o); } else if (o is ArrayList) { foreach (object oChild in ((ArrayList)o)) { if (oChild is string) { strOutput = ((string)oChild); JSONDeserialized += strOutput + ","; } else if (oChild is Dictionary) { JSONDictionarytoYAML((Dictionary)oChild); JSONDeserialized += "\r\n"; } } } else { strOutput = o.ToString(); JSONDeserialized += strOutput; } } indentLevel--; return bSuccess; } 

uso

  Dictionary JSONDic = new Dictionary(); JavaScriptSerializer js = new JavaScriptSerializer(); try { JSONDic = js.Deserialize>(inString); JSONDeserialized = ""; indentLevel = 0; DisplayDictionary(JSONDic); return JSONDeserialized; } catch (Exception) { return "Could not parse input JSON string"; }