Newtonsoft JSON не десериализует вложенный объект в моем json файле - PullRequest
1 голос
/ 28 мая 2020

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

[
  {
    "colorData": [
      255,
      255,
      255
    ],
    "Neighbours": [
      {
        "Item1": 0,
        "Item2": [
          {
            "colorData": [
              255,
              255,
              255
            ],
            "numberOfExamples": 188
          },
          {
            "colorData": [
              255,
              24,
              0
            ],
            "numberOfExamples": 15
          }
        ]
      },
      {
        "Item1": 1,
        "Item2": [
          {
            "colorData": [
              255,
              255,
              255
            ],
            "numberOfExamples": 188
          },
          {
            "colorData": [
              255,
              24,
              0
            ],
            "numberOfExamples": 15
          }
        ]
      },
      {
        "Item1": 2,
        "Item2": [
          {
            "colorData": [
              255,
              255,
              255
            ],
            "numberOfExamples": 188
          },
          {
            "colorData": [
              255,
              24,
              0
            ],
            "numberOfExamples": 15
          }
        ]
      },
      {
        "Item1": 3,
        "Item2": [
          {
            "colorData": [
              255,
              255,
              255
            ],
            "numberOfExamples": 188
          },
          {
            "colorData": [
              255,
              24,
              0
            ],
            "numberOfExamples": 15
          }
        ]
      }
    ]
  }
]

Это объект, в который я пытаюсь десериализовать его:

public partial class ImageBrainData_Reader
{
    public int[] colorData { get; set; }
    public List<Neighbour_Reader> neighbours { get; set; }
}

public partial class Neighbour_Reader
{
    public int direction { get; set; }
    public List<NeighbourData_Reader> neighbourData_Reader { get; set; }     
}

public partial class NeighbourData_Reader
{
    public int[] colorData { get; set; }
    public int numberOfExamples { get; set; }
}

И это это то, что я делаю, чтобы загрузить его из файла:

 List<ImageBrainData_Reader> dataRead = JsonConvert.DeserializeObject<List<ImageBrainData_Reader>>(File.ReadAllText(fileName + ".json"));

Первая часть (colorData) вводится и правильное количество вложенных Neighbours, но никакие данные из них (Item1 и Item2) читаются. Вместо получения данных они возвращаются к своим значениям по умолчанию (0 и null соответственно).

1 Ответ

1 голос
/ 28 мая 2020

Json. Net не имеет никакого способа узнать, что Item1 отображается на direction, а Item2 отображается на neighbourData_Reader, если вы этого не сообщите. Вам нужно либо добавить некоторые атрибуты [JsonProperty], как показано ниже, либо переименовать свои свойства, чтобы они соответствовали JSON.

public partial class Neighbour_Reader
{
    [JsonProperty("Item1")]
    public int direction { get; set; }
    [JsonProperty("Item2")]
    public List<NeighbourData_Reader> neighbourData_Reader { get; set; }
}

Fiddle: https://dotnetfiddle.net/ajE0HD

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...