{
"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文件,所以必须动态获取值。
答案 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);
}