Iteración sobre el objeto JSON en C #

Estoy usando JSON.NET en C # para analizar una respuesta de la API de Klout. Mi respuesta es así:

[ { "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" } ] 

Como puede ver, contiene 5 tags de id . Quizás la próxima vez sea 6 o 1 o algún otro número. Quiero iterar sobre el JSON y obtener el valor de cada etiqueta de id . No puedo ejecutar un ciclo sin saber cuántos habrá. ¿Como puedo resolver esto?

 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; } 

Puede usar JsonTextReader para leer el JSON e iterar sobre los tokens:

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

Esto funcionó para mí, convierte a JSON nested en fácil de leer 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"; }