В C# после десериализации JSON свойство равно Null

170
05 апреля 2018, 11:42

Всем привет. Десериализовал JSON, но почему-то при попытке вывести какие-либо значения, получаю либо Null, либо исключение.

JSON:

[
[
    {
        "way_id":"24665462",
        "points": [
            {"x":"12847.1", "z":"60990.6"},
            {"x":"12846.5", "z":"60989.8"},
            {"x":"12845.2", "z":"60988.9"},
            {"x":"12845.6", "z":"60989.1"},
            {"x":"12846.3", "z":"60989.7"},
            {"x":"12846.9", "z":"60990.4"},
            {"x":"12847", "z":"60990.5"}
        ],
        "tags": [
            {"key":"bicycle", "value":"yes"},
            {"key":"highway", "value":"footway"},
            {"key":"lit", "value":"yes"},
            {"key":"smoothness", "value":"good"},
            {"key":"surface", "value":"asphalt"}
        ]
    }
],
[
    {
        "way_id":"24665463",
        "points": [
            {"x":"12847.6", "z":"60990.6"},
            {"x":"12847.1", "z":"60989.8"},
            {"x":"12847.3", "z":"60990.2"},
            {"x":"12847.4", "z":"60990.2"},
            {"x":"12847.1", "z":"60989.9"}
        ],
        "tags": [
            {"key":"highway", "value":"footway"},
            {"key":"source","value":"survey"}
        ]
    }
]

]

Модель:

    [Serializable]
public class JsonRoot
{
    public WayObject ways { get; set; }
}
[Serializable]
public class WayObject
{
    public Way way { get; set; }
}
[Serializable]
public class Way
{
    public ulong wayID { get; set; }
    public Coords coords { get; set; }
    public Description description { get; set; }
}
[Serializable]
public class Coords
{
    public Point points { get; set; }
}
[Serializable]
public class Description
{
    public Tags tags { get; set; }
}
[Serializable]
public class Point
{
    public float x { get; set; }
    public float z { get; set; }
}
[Serializable]
public class Tags
{
    public string key { get; set; }
    public string value { get; set; }
}

C#:

var root = JsonConvert.DeserializeObject<List<List<JsonRoot>>>(jsonData);
    Debug.Log(root[0][0].ways); // null
    Debug.Log(root[0][0].ways.way.wayID); // NullReferenceException: Object reference not set to an instance of an object

В чем может быть ошибка? Может, где-то не так структуру накладываю?

Answer 1
  1. У вас имена JSON отличаются от тех, что в классах. То есть в JSON к примеру у вас way_id, а в классе wayID. Хотите красивые имена - ставьте [JsonProperty("way_id")].

  2. У вас в JSON нету таких разделов как ways и way, у вас есть просто зубчатый массив Way[][] с уже последующими данными (по типу Points и др.).

Советую вам взглянуть на свой JSON через этот сайт, сразу поймете его структуру. А также может пригодиться данный сайт, который поможет в создании правильной структуры классов.

READ ALSO
Загрузка/удаление записей из базы и вывод в WPF

Загрузка/удаление записей из базы и вывод в WPF

Есть база данныхДержать все записи в памяти очень ресурсно затратно

140
Убрать стиль текста XML

Убрать стиль текста XML

ЗдравствуйтеИмеется XML документ, который парсится методом XDocument

170