代码之家  ›  专栏  ›  技术社区  ›  Tommy

投影到类的C#LINQ

  •  0
  • Tommy  · 技术社区  · 7 年前

    我调用一个web服务,得到一个JSON格式的响应对象。

    我想把结果列在一张单子上,这样我就可以一一列举了。

    所以我有了这段代码。

    var players = getPlayersResponse.Payload
      .Select(p => new { p.Name, p.Pid, p.Model, p.Ip, p.Gid })
      .ToList();
    foreach (var p in players)
    {
        Players.Items.Add(p.Name);
    }
    

    我想返回一个已知类的列表,因此尝试了以下操作:

    var players = getPlayersResponse.Payload
      .Select(p => new Player { Name= p.Name, Pid= p.Pid, Model= p.Model, Ip= p.Ip, Gid= (int)p.Gid })
      .ToList();    
    foreach (var p in players)
    {
        Players.Items.Add(p.Name);
    }
    

    还有班级

    public class Player
    {
      public string Name { get; set; }
      public int Pid { get; set; }
      public string Model { get; set; }
      public string Ip { get; set; }
      public int Gid { get; set; }
    }
    

    这个版本不工作(listbox没有填充项),而且我根本没有错误,编译器也不会抱怨。奇怪的是,如果我没有将p.Gid转换成int,编译器确实会抱怨,但在这两种情况下,它都是相同的json结果。

    我看不出我做错了什么。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Tommy    7 年前

    我这样改变班级解决了这个问题

    public class Player
    {
       public string Name { get; set; }
       public int Pid { get; set; }
       public string Model { get; set; }
       public string Ip { get; set; }
       public int? Gid { get; set; }
    }