2014-12-05 3 views
0

Я хочу запустить цикл foreach через вложенный List в этом JSON.C# десериализовать вложенные списки и отобразить их

Я получаю некоторые JSON, который выглядит как:

{ 
    "name":"Placeholder", 
    "entries": 
     [ 
      { 
       "playerId": "27271906", 
       "playerName": "Billy" 
      }, 
      { 
       "playerId": "35568613", 
       "playerName": "Jeeves" 
      } 
     ] 
} 

классы:

public class IDs 
{ 
    public string playerId { get; set; } 
} 

public class Top 
{ 
    public List<IDs> entries { get; set; } 
} 

Когда я иду, чтобы запустить программу, она, кажется, не работает, когда он получает:

List<string> pros = new List<string>(); 
using (var web = new WebClient()) 
{ 
    web.Encoding = System.Text.Encoding.UTF8; 
    var jsonString = responseFromServer; 
    var jss = new JavaScriptSerializer(); 
    var ProsList = jss.Deserialize<List<IDs>>(jsonString); 
    int i = 1; 

    foreach (IDs x in ProsList) 
    {       
     pros.Add(x.playerId); 
     i++; 
     if (i == 3) 
     { 
      break; 
     } 
    } 
} 

Когда я его настроил так, он скажет, что я не могу использовать foreach, так как нет переписчик. Есть идеи? Я новичок в C# и синтаксисе, поэтому некоторым людям может быть очень легко увидеть. Благодаря!

Я хотел бы добавить, что я использую Visual Studio 2013.

+0

возможно дубликат (HTTP [десериализации JSON в C# динамический объект?]://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object) – Kutyel

+0

Я думаю, что это больше относится к перечислению 'foreach', idk. – Kragalon

ответ

1

Вы должны десериализации JSON в Top вместо List<IDs> и перечислить result.entries. Измените код ниже

List<string> pros = new List<string>(); 
using (var web = new WebClient()) 
{ 
    web.Encoding = System.Text.Encoding.UTF8; 
    var jsonString = responseFromServer; 
    var jss = new JavaScriptSerializer(); 
    var result = jss.Deserialize<Top>(jsonString); 
    int i = 1; 

    foreach (IDs x in result.entries) 
    {       
     pros.Add(x.playerId); 
     i++; 
     if (i == 3) 
     { 
      break; 
     } 
    } 
} 

В качестве альтернативы вы можете также использовать JSON.NET как ниже

List<string> pros = new List<string>(); 
using (var web = new WebClient()) 
{ 
    web.Encoding = System.Text.Encoding.UTF8; 
    var jsonString = responseFromServer; 

    var result = JsonConvert.DeserializeObject<Top>(jsonString); 
    int i = 1; 

    foreach (IDs x in result.entries) 
    {       
     pros.Add(x.playerId); 
     i++; 
     if (i == 3) 
     { 
      break; 
     } 
    } 
} 

Работа демо: https://dotnetfiddle.net/naqPx2

+0

Большое спасибо. Иногда я такой плотный. :) Я проверю это через 6 минут – Kragalon

Смежные вопросы