【问题标题】:How to create an array from a JSON object in C# using JSON.Net如何使用 JSON.Net 从 C# 中的 JSON 对象创建数组
【发布时间】:2016-04-21 03:23:06
【问题描述】:

我收到以下 JSON 对象作为对 GET 请求的服务器响应:

{{  "data": [    {      "role_id": "1",      "role_name": "Administrator"    },    {      "role_id": "2",      "role_name": "Operator"    }  ]}}

我正在尝试创建一个“role_id”数组和一个单独的“role_name”数组。然后,我想将“role_name”数组的每个成员添加到组合框。现在我正在使用 Newtonsoft.Json.Linq 执行以下操作:

JObject par = JObject.Parse(res);
        foreach(string s in (string)par["data"]))
            {
        }

        string role = (string)par["data"]["role_id"];
        string name = (string)par["data"]["role_name"];
        this.cmbRoleID.Items.Add(name.ToString());

我想知道无论在 {{"data":[]}} 中发送了多少对 role_id 和 role_name ,我如何使用 foreach 循环或其他东西来实现这一点。

【问题讨论】:

  • 您确定这是您收到的数据吗? JSON 周围有一对额外的花括号,这使其成为无效的 JSON。

标签: c# arrays json json.net


【解决方案1】:

为什么不将 json 字符串反序列化成一个类呢? 创建映射到您的 JSON 结构的类

public class Data
{
    public string role_id { get; set; }
    public string role_name { get; set; }
}

public class RootObject
{
    public List<Data> data { get; set; }
}

然后反序列化它并像往常循环对象数组时一样循环。

var result = JsonConvert.DeserializeObject<RootObject>(res);
foreach(var item in result.data)
{
   //item.role_id, item.role_name
   //Your logic here.
}

【讨论】:

    【解决方案2】:

    简单。如果您使用“动态”,则代码行数最少。对于:

    {  
       "data":[  
          {  
             "role_id":"1",
             "role_name":"Administrator"
          },
          {  
             "role_id":"2",
             "role_name":"Operator"
          }
       ]
    }
    

    做这样的事情:

    dynamic parsedObj = JsonConvert.DeserializeObject(json);
    
    foreach(var child in parsedObj.data)
    {
       var roleId = child.role_id;
       var roleName = child.role_name;
       //now do something with them.
    }
    

    【讨论】:

      【解决方案3】:

      您可以像这样使用 for 循环遍历 JSON:

      JObject par = JObject.Parse(res);
      foreach(JToken data in par["data"].Children()))
      {
          string role = data["role_id"].ToString();
          string name = data["role_name"].ToString();
          this.cmbRoleID.Items.Add(name);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        相关资源
        最近更新 更多