Как я могу десериализовать вложенные массивы JSON?

1

Я пытаюсь десериализовать GeoJson, чтобы я мог разбить его и сохранить в Db. Когда я пытаюсь десериализировать его, десериализация coordinates выполняется.

Я использую следующий класс для геометрии:

public class GeoJsonGeometry {
    public string type { get; set; }
    public string[, ,] coordinates { get; set; }
}

"geometry": { "type": "Polygon", "coordinates": [ [ [ -85.388717, 33.913044 ], [ -85.380885, 33.873508 ], [ -85.379455, 33.866291 ], [ -85.377426, 33.856047 ], [ -85.376403, 33.850656 ], [ -85.364595, 33.788446 ], [ -85.361844, 33.773951 ], [ -85.360491, 33.767958 ], [ -85.357402, 33.750104 ], [ -85.355252, 33.739245 ], [ -85.344054, 33.682684 ], [ -85.342722, 33.675953 ], [ -85.323792, 33.580339 ], [ -85.315340, 33.537646 ], [ -85.314994, 33.535898 ], [ -85.314843, 33.534951 ], [ -85.314091, 33.530218 ], [ -85.313999, 33.529807 ], [ -85.304439, 33.482884 ], [ -85.308211, 33.481579 ], [ -85.309250, 33.483137 ], [ -85.314852, 33.487603 ],...]]]

Я попробовал double [,] но это тоже не сработало.

Я запутался, так как это выглядит так, что он должен хорошо сериализоваться, поскольку он вложен массивами, но это не так. Любая помощь будет оценена по достоинству.

Я также попробовал List<List<List<double>>> и double[][][] и он всегда терпит неудачу.

  • 1
    не могу понять, почему за этот вопрос проголосовали, у меня была такая же проблема, и этот пост помог.
Теги:
deserialization
json.net

2 ответа

3
Лучший ответ

Объект Geometry должен быть

public class Geometry
{
    public string type { get; set; }
    public List<List<List<double>>> coordinates { get; set; }
}

РЕДАКТИРОВАТЬ

var obj = JsonConvert.DeserializeObject<RootObject>(json);


public class Geometry
{
    public string type { get; set; }
    public List<List<List<double>>> coordinates { get; set; }
}

public class RootObject
{
    public Geometry geometry { get; set; }
}

JSON:

{
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [
                    -85.388717,
                    33.913044
                ],
                [
                    -85.380885,
                    33.873508
                ],
                [
                    -85.379455,
                    33.866291
                ],
                [
                    -85.377426,
                    33.856047
                ],
                [
                    -85.376403,
                    33.850656
                ],
                [
                    -85.364595,
                    33.788446
                ],
                [
                    -85.361844,
                    33.773951
                ],
                [
                    -85.360491,
                    33.767958
                ],
                [
                    -85.357402,
                    33.750104
                ],
                [
                    -85.355252,
                    33.739245
                ],
                [
                    -85.344054,
                    33.682684
                ],
                [
                    -85.342722,
                    33.675953
                ],
                [
                    -85.323792,
                    33.580339
                ],
                [
                    -85.31534,
                    33.537646
                ],
                [
                    -85.314994,
                    33.535898
                ],
                [
                    -85.314843,
                    33.534951
                ],
                [
                    -85.314091,
                    33.530218
                ],
                [
                    -85.313999,
                    33.529807
                ],
                [
                    -85.304439,
                    33.482884
                ],
                [
                    -85.308211,
                    33.481579
                ],
                [
                    -85.30925,
                    33.483137
                ],
                [
                    -85.314852,
                    33.487603
                ]
            ]
        ]
    }
}
  • 0
    Сначала попробовал это и получил: Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип «System.Double», потому что тип требует примитивное значение JSON (например, string, number, boolean, null) для правильной десериализации , Чтобы исправить эту ошибку, либо измените JSON на примитивное значение JSON (например, string, number, boolean, null) или измените десериализованный тип на массив или тип, который реализует интерфейс коллекции (например, ICollection, IList), например List <T> это можно десериализовать из массива JSON. JsonArrayAttribute также может быть добавлен к типу, чтобы принудительно десериализовать его из массива JSON.
  • 0
    Тогда я попробовал это со строкой, и это также не удалось.
Показать ещё 4 комментария
2

JSON не поддерживает многомерные измерения.

Это массив массивов массивов: double[][][].

  • 0
    Да, я тоже это попробовал, и это не удалось.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню