2014-12-05 74 views
0

我想通過在本JSON嵌套List運行foreach循環。C#反序列化嵌套列表和foreach他們

我得到一些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 2014-12-05 07:34:09

+0

我覺得它更多的'foreach'枚舉,IDK的雖然。 – Kragalon 2014-12-05 11:59:57

回答

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 2014-12-05 07:35:05