【问题标题】:c# list each in json arrayc#在json数组中列出每个
【发布时间】:2019-02-05 18:29:15
【问题描述】:

我是这方面的新手,并且已经弄清楚了一些 json 解析。
我来自 api 的 json 响应如下所示。

{
  count: 100,
  value: [{
        id: "03dd9f56-108f-4e8f-b92e-93df05717464",
        name: "IIBTest",
        url: "http://xxx:8080/tfs/DefaultCollection/_apis/projects/03dd9f56-108f-4e8f-b92e-93df05717464",
        state: "wellFormed",
        revision: 14434848,
        visibility: "private"
      },
      {
        id: "b7e15034-fc8f-4f7e-866a-cb06f44b12ed",
        name: "MS Project POC",
        description: "POC for MS Project with TFS",
        url: "http://xxx/tfs/DefaultCollection/_apis/projects/b7e15034-fc8f-4f7e-866a-cb06f44b12ed",
        state: "wellFormed",
        revision: 14434955,
        visibility: "private"
      },
      {
        id: "59e06621-c5f5-4fd1-9c55-1def541b99d9",
        name: "WorkflowReporting",
        url: "http://xxx/tfs/DefaultCollection/_apis/projects/59e06621-c5f5-4fd1-9c55-1def541b99d9",
        state: "wellFormed",
        revision: 14434591,
        visibility: "private"
      },
      {
        id: "78a802f0-5eee-4bcb-bde9-a764e46f56db",
        name: "iSolutions",
        url: "http://xxx/tfs/DefaultCollection/_apis/projects/78a802f0-5eee-4bcb-bde9-a764e46f56db",
        state: "wellFormed",
        revision: 14434639,
        visibility: "private"
      },
      {
        id: "1f20506a-63a5-486a-a857-fec64d7486a6",
        name: "Training",
        description: "MLITS Training and Learning",
        url: "http://xxx/tfs/DefaultCollection/_apis/projects/1f20506a-63a5-486a-a857-fec64d7486a6",
        state: "wellFormed",
        revision: 14434676,
        visibility: "private"
      },

等等,我收藏了 100 个项目。在我的代码中,我只是试图 console.writeline 名称:我的代码看起来像这样。

WebClient wc = new WebClient();
var projectUri = "http://xxx/tfs/defaultcollection/_apis/projects?api-version=3.0";
wc.UseDefaultCredentials = true;
string jsonProjectCollection = wc.DownloadString(projectUri);

var project = JsonConvert.DeserializeObject<Project>(jsonProjectCollection);
var projectname = project.value[0].name;
int count = project.count;

Console.WriteLine(count);
Console.WriteLine(projectname);

项目名称只给了我第一个数组中的名称,我怎样才能让它逐步遍历每个数组并打印每个项目名称的列表。抱歉,我是新手,所以任何帮助都会很棒。

【问题讨论】:

  • 推测project.value是一个列表或数组,所以使用foreach (var entry in project.value)
  • 还在问题中添加 Project 类

标签: c# arrays json


【解决方案1】:

没关系,不知道我在这里是怎么想的。

           for (int intCounter = 0; intCounter < count; intCounter ++)
        {
            var projectname = project.value[intCounter].name;
            Console.WriteLine(projectname);
        }

【讨论】:

  • 当您可以只使用 foreach 而不是 project.value 时,为什么还要使用依赖于单独的 count 值的 for 循环?
  • @JonSkeet - 两者都是有效的方法。从技术上讲,for 循环更快,这就是原因之一。
  • @ScubaSteve:不知道project.value 的类型,你不能说哪个更快。除此之外,性能上的任何差异几乎肯定将是微不足道的,我强烈鼓励 OP 编写最简单的代码开始工作 - 这更有可能是 @987654327 @循环。
  • @JonSkeet - 是的,但这是一个例子,我们不知道最终用途。它可以在 n 行上运行。此外,for 循环是第一年的 CS,它几乎不比 for each 复杂。您可能会认为 a for each 更复杂,因为幕后还有更多事情要做。
  • @ScubaSteve:引擎盖下还有更多内容,但代码更易于阅读。这就是为什么它是从语言开始的。这里的索引只是一个实现细节——除非它用于其他而不是“到达每个条目”,我会满足于foreach比@987654329更清楚地描述代码的意图@循环。
【解决方案2】:

对我来说,反序列化和保留对象结构更有意义,并且更有用。 value 中的对象是一个 JSON 数组。您可以使用 Json.NET JArray 类来存储内部值。

https://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JArray.htm

所以,反序列化 -> 将数组拉出对象结构 -> 遍历所述数组。

//pseudo code ahead
foreach(project p in projects)
{
    Console.WriteLine(p.name);
}

或者,直接访问对象,您可以执行一个简单的 for 循环。请注意,您也可以在 C# 中对数组执行 for each。

for(int i = 0; i < project.count; i++)
{
    Console.WriteLine(project.value[i].name);
}

【讨论】:

    【解决方案3】:
    var projectCollection = JsonConvert.DeserializeObject<Project>(jsonProjectCollection);
    var projects= projectCollection.value;
    int count = projectCollection .count;
    foreach(var project in projects)
    {
       Console.WriteLine(project.name);
    }
    Console.WriteLine(count);
    Console.WriteLine(projectname);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-27
      • 2012-11-11
      • 2012-02-07
      • 2013-02-13
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多