2014-12-05 76 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