Десериализация файла JSON, выход не отображается - PullRequest
0 голосов
/ 04 декабря 2018

пытался десериализовать определенный файл JSON, структурированный следующим образом

[
  {
    "Inputs": [
      {
        "Input": "ABC"
      },
      {
        "Input": "DEF "
      },
      {
        "Input": "GHI"
      }
    ]
  }
]

Я хочу напечатать ABC, DEF, GHI в моем окне вывода отладочной информации, но я не получаю никакого результата.мой код C # выглядит следующим образом:

public partial class InputArray
{
    [JsonProperty("Inputs")]
    public List<InputObject> Inputs { get; set; }
}

public partial class InputObject
{
    [JsonProperty("Input")]
    public string Input { get; set; }
}

public static void LoadJson()
{
    using (StreamReader r = new StreamReader("input.json"))
    {
        var json = r.ReadToEnd();
        var items = JsonConvert.DeserializeObject<List<InputObject>>(json);


        foreach (var item in items)
        { 
            Debug.WriteLine(item.Input);
        }

    }
}

Я пробовал несколько различных решений по переполнению стека, но безуспешно.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Внимательно посмотрите на свой JSON.Корень - это массив, обозначенный как самый внешний [].

. Внутри массива есть объект, который представлен вашим классом InputArray.Обратите внимание, что это не ваш класс InputObject.

Вместо этого вы должны десериализовать List<InputArray>.

var items = JsonConvert.DeserializeObject<List<InputArray>>(json);

Затем вам нужно использовать вложенные циклы для циклического перемещения по элементам:

   foreach (var inputArray in items) {
        foreach (var inputObject in inputArray.Inputs) {
            Console.WriteLine(inputObject.Input);
        }
    }
0 голосов
/ 04 декабря 2018

Ваши классы должны быть как

public class InputObject
{
    public string Input { get; set; }
}

public class InputArray
{
    public List<InputObject> Inputs { get; set; }
}

, и вы должны сериализоваться, как показано ниже

var items = JsonConvert.DeserializeObject<List<InputArray>>(json);
...