2016-11-30 3 views
1

Описание:

У меня есть строка ул, как показано ниже:Loop объектов в массиве JSON с помощью Json.NET [C#]

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

Я знаю, что я мог десериализации его JSon как

JsonConvert.DeserializeObject<CustomType>(str). 

Теперь у меня есть требование, чтобы зацикливать эти объекты и получить значения. Как мне это сделать?

+1

Ваш JSON строка представляет собой список. Вы не можете десериализовать это так. Как выглядит ваш класс «CustomType»? – HebeleHododo

+0

Просто используйте foreach (элемент var в CustomTypeList) {// 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.

EDIT

Если у вас есть более одного свойства для каждого объекта ваш цикл должен выглядеть следующим образом.

+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

Смежные вопросы