2016-11-30 37 views
1

说明在一个JSON对象数组:

我有一个字符串STR象下面这样:环路通过使用Json.net [C#]

[ 
    { 
    "key1": "value1", 
    "key2": "value2" 
    }, 
    { 
    "key1": "value3", 
    "key2": "value4" 
    } 
] 

我知道我可以反序列化到JSON像

JsonConvert.DeserializeObject<CustomType>(str). 

现在我有一个循环这些对象并获取值的要求。我应该怎么做?

+1

你的JSON字符串是一个列表。你不能像这样反序列化它。你的'CustomType'类是什么样的? – HebeleHododo

+0

只需使用foreach(CustomTypeList中的var项){// here get item} –

+0

实际上,我不想创建一个新的类来映射json键。我只想循环数组以获取每个对象中的键和值。 – Garry

回答

2
JArray array = JsonConvert.DeserializeObject<JArray>(json); 

foreach(JObject item in array) 
{ 
    var a = item.Children<JProperty>().FirstOrDefault().Name; 
    var b = item.Children<JProperty>().FirstOrDefault().Value; 

} 

这里,如果你在数组的每个元素只有一个属性。如果你有多个属性,你需要循环所有的孩子。

查看dotNetFiddle查看完整的代码示例。

编辑

如果每个对象不止一个属性你的循环应该是这样的。

+0

它应该有更多的属性,什么类型的item.children ()? JEnumerable ?对不起,我是C#的新手。更新问题。 – Garry

+0

@Garry检查编辑。 – mybirthname

+1

是的,作品完美。谢谢你的时间! – Garry

1

你可以反序列化JSON字符串到List<Dictionary<string, string>>

List<Dictionary<string, string>> list = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(str); 

然后循环该列表

List<string> values = new List<string>(); 
foreach(Dictionary<string, string> dict in list) 
{ 
    foreach(KeyValuePair<string, string> kvPair in dict) 
    { 
     values.Add(kvPair.Value); 
    } 
} 
+1

感谢您的时间回答,这两个解决方案都看起来不错。 – Garry