Отключить JSON из файла [дубликат]

for(var k in validation_messages) {
    var o = validation_messages[k];
    do_something_with(o.your_name);
    do_something_else_with(o.your_msg);
}
7
задан Brian Rogers 12 January 2016 в 17:35
поделиться

1 ответ

Что 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.

19
ответ дан CodeCaster 28 August 2018 в 17:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: