如何在c#中返回<class>列表?

时间:2017-03-27 04:46:04

标签: c# json list

我试图从方法中返回List。但我只获得了列表中的最后一个迭代数据。我在哪里弄错了?它会覆盖列表中每个循环的数据。

 public class ProjectData
 {
     public string name { get; set; }
     public string id { get; set; }
     public string web_url { get; set; }
 }

 public static List<ProjectData> GetProjectList()
 {
     int pageCount = 0;
     bool check = true;
     List<ProjectData> copy = new List<ProjectData>();
     List<ProjectData> projectData = new List<ProjectData>();

     while (check)
     {
         ProjectData NewProjectData = new ProjectData();
         pageCount = pageCount + 1;
         string userURL = "http://gitlab.company.com/api/v3/groups/450/projects?private_token=token&per_page=100&page=" + pageCount;
         HttpWebRequest requestforuser = (HttpWebRequest)WebRequest.Create(userURL);
         HttpWebResponse responseforuser = requestforuser.GetResponse() as HttpWebResponse;
         using (Stream responseStream = responseforuser.GetResponseStream())
         {
             StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
             var JSONString = reader.ReadToEnd();
             projectData = JsonConvert.DeserializeObject<List<ProjectData>>(JSONString);
             if (JSONString == "[]")
             {
                 check = false;
                 break;
             }
         }
         copy = projectData.ToList();
     }
     return copy;
 }

我知道有更多300个数据可用于填写列表。我用断点检查了它。在那,我发现所有数据都正确获取。但它没有被复制到copy<>列表。每次都在copy<>列表中覆盖它。如何防止过度写作?

2 个答案:

答案 0 :(得分:5)

在每次迭代中,您使用copy中的当前值覆盖projectData的值,并且仅返回最后一个值。实际上projectDatacopy属于同一类型,即List<ProjectData>,因此您无需使用.ToList()将其再次转换为List。总之,你必须这样使用:

copy.AddRange(projectData);

取而代之的是copy = projectData.ToList();

答案 1 :(得分:1)

替换copy = projectData.ToList();copy.Add(projectData.ToList());