for(var k in validation_messages) {
var o = validation_messages[k];
do_something_with(o.your_name);
do_something_else_with(o.your_msg);
}
Что JSON не является массивом Foo
JSON. Код JsonConvert.DeserializeObject<T>(jsonString)
будет разбирать строку JSON от корня вверх, а ваш тип T
должен точно соответствовать этой структуре JSON. Синтаксический анализатор не собирается гадать , член JSON должен представлять List<Foo>
, который вы ищете.
Вам нужен корневой объект, представляющий JSON из корневой элемент.
Вы можете легко позволить классам делать это, создаваемое из образца JSON. Для этого скопируйте свой JSON и нажмите Edit -> Paste Special -> Paste JSON As Classes
в Visual Studio.
В качестве альтернативы вы можете сделать то же самое на http://json2csharp.com , который генерирует больше или меньше тех же классов.
Вы увидите, что коллекция фактически является одним элементом глубже, чем ожидалось:
public class Foo
{
public string bar { get; set; }
}
public class RootObject
{
public List<Foo> foo { get; set; }
}
Теперь вы можете десериализовать JSON из корня (и быть уверенным переименовать RootObject
в нечто полезное):
var rootObject = JsonConvert.DeserializeObject<RootObject>(jsonString);
И получить доступ к коллекции:
foreach (var foo in rootObject.foo)
{
// foo is a `Foo`
}
Вы всегда можете переименовать свойства, чтобы следовать за своим соглашением об обсадке, и применить JsonProperty
:
public class Foo
{
[JsonProperty("bar")]
public string Bar { get; set; }
}
Также убедитесь, что JSON содержит достаточно данных образца. Парсер класса должен угадать соответствующий тип C # на основе содержимого, содержащегося в JSON.