如何使用JSON.Net从C#中的JSON对象创建数组

如何使用JSON.Net从C#中的JSON对象创建数组,c#,arrays,json,json.net,C#,Arrays,Json,Json.net,我正在接收以下JSON对象作为GET请求的服务器响应: {{ "data": [ { "role_id": "1", "role_name": "Administrator" }, { "role_id": "2", "role_name": "Operator" } ]}} 我正在尝试创建一个“role\u id”数组和一个单独的“role\u name”数组。然后,我想将“role\u name”数组的每个成员添加到一个组

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

{{  "data": [    {      "role_id": "1",      "role_name": "Administrator"    },    {      "role_id": "2",      "role_name": "Operator"    }  ]}}
我正在尝试创建一个“role\u id”数组和一个单独的“role\u name”数组。然后,我想将“role\u 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());

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

您可以使用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);
}
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.
}

您可以使用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);
}
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.
}

为什么不将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; }
}
公共类数据
{
公共字符串角色_id{get;set;}
公共字符串角色名称{get;set;}
}
公共类根对象
{
公共列表数据{get;set;}
}
然后反序列化它并像循环对象数组时通常那样循环

var result = JsonConvert.DeserializeObject<RootObject>(res);
foreach(var item in result.data)
{
   //item.role_id, item.role_name
   //Your logic here.
}
var result=JsonConvert.DeserializeObject(res);
foreach(result.data中的var项)
{
//item.role\u id,item.role\u name
//你的逻辑在这里。
}

为什么不将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; }
}
公共类数据
{
公共字符串角色_id{get;set;}
公共字符串角色名称{get;set;}
}
公共类根对象
{
公共列表数据{get;set;}
}
然后反序列化它并像循环对象数组时通常那样循环

var result = JsonConvert.DeserializeObject<RootObject>(res);
foreach(var item in result.data)
{
   //item.role_id, item.role_name
   //Your logic here.
}
var result=JsonConvert.DeserializeObject(res);
foreach(result.data中的var项)
{
//item.role\u id,item.role\u name
//你的逻辑在这里。
}

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

这样做:

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);
}
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.
}

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

这样做:

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);
}
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.
}

你确定这是你收到的数据吗?JSON周围有一对额外的大括号,这使它成为无效的JSON。您确定这是您正在接收的数据吗?JSON周围有一对额外的大括号,这使它成为无效的JSON。