如何使用foreach并使用c#获取数组值

时间:2018-06-06 07:03:19

标签: c# json

{
  "Config": {
    "controls": [
      {
        "id": 1,
        "name": "test",
        "inputs": [
          {
          }
        ]
      },
      {
        "id": 2,
        "name": "xyz",
        "inputs": [
          {
          }
        ]
      }
    ]
  }
}

我想获取id的值,使用foreach命名,但我想要排除inputs

我试过下面的c#代码 -

var test = JObject.Parse(jsonmessage);
foreach (var x in test["Config"]["controls"])
{
    var key = ((JProperty)(x)).Name;
    var jvalue = ((JProperty)(x)).Value;
}

我在这里得到例外:(

  

{“无法将类型为'Newtonsoft.Json.Linq.JObject'的对象强制转换为键入   'Newtonsoft.Json.Linq.JProperty'。“}

我不能使用具体类,因为属性有时会增加 从json文件,所以必须动态获取值。

4 个答案:

答案 0 :(得分:3)

非常简单的方法是

string json = "{\"Config\": {\"controls\": [{\"id\": 1,\"name\": \"test\",\"inputs\": [{}]},{\"id\": 2,\"name\": \"xyz\",\"inputs\": [{}]}]}}";

var test = JObject.Parse(json);
foreach (var x in test["Config"]["controls"])
{
    var key = x["id"];
    var jvalue = x["name"];
}

现在,您可以从json字符串中读取任何属性,并通过将其转换为所需的数据类型在任何地方使用它。

答案 1 :(得分:1)

我个人只是将json deseralize成一个类。

示例:

var test = Json.Convert<MyClass>(jsonmessage);
foreach (var x in test.Config.controls)
{
    var key = x.id
}

MyClass想要的地方如下:

public class MyClass
{
    public Config Config { get;set }
}

public class Config 
{
    public IEnumerable<Controls> controls { get;set; }
}

public class Controls
{
    public int id { get;set }
    public string name { get;set; }
}

答案 2 :(得分:1)

当像这样迭代时:

foreach (var x in test["Config"]["controls"])
{
    // On first iteration:
    // x = 
    // {
    //     "id": 1,
    //     "name": "test",
    //     "inputs": [{}]
    // }

    // therefore you could do:
    var id = x["id"];
    var name = x["name"];

    // or use another foreach
    foreach(var prop in x)
    {
        // and here you might be able to do what you wanted to
    }
}

答案 3 :(得分:1)

您可以使用一些LINQ来提取ID和名称。

var test = JObject.Parse(json);
var list = test["Config"]["controls"].AsQueryable().Select(x => new Tuple<int, string>(int.Parse(x["id"].ToString()), x["name"].ToString()));

现在你有了一个元组列表,其第一项是id,第二项是名称。

//This is for demo : print id and name here
foreach(var tuple in list)
{
     Console.WriteLine("Id = {0}, Name = {1}", tuple.Item1, tuple.Item2);
}