Десериализовать массив массивов в C # - PullRequest
0 голосов
/ 02 сентября 2018

У меня следующий json: нужно десериализовать в C #.

[
    [{
        "ElementName": "H1 ",
        "lat": 51.394319720562514,
        "lng": -109.99996662139893
    }, {
        "ElementName": "H1 ",
        "lat": 51.394319720562514,
        "lng": -109.99995589256287
    }],    
    [{
        "ElementName": "H2 ",
        "lat": 51.394319720562514,
        "lng": -109.99996662139893
    }, {
        "ElementName": "H2 ",
        "lat": 51.394319720562514,
        "lng": -109.99995589256287
    }]
]

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

public  class PointElement
{
    public string ElementName { get; set; }

    public double lat { get; set; }
    public double lng { get; set; }
}

var testPointList = JsonConvert.DeserializeObject<List<PointElement>>(testNewJson);

но консоль показывает ошибку

Controllers.PointElementRecord ', поскольку тип требует JSON объект (например, {"name": "value"}) для правильной десериализации. Чтобы исправить это ошибка, либо измените JSON на объект JSON (например, {"name": "value"}) или измените десериализованный тип на массив или тип, который реализует интерфейс коллекции (например, ICollection, IList), такой как List, который может быть десериализованным из массива JSON. JsonArrayAttribute также может быть добавлен к типу, чтобы заставить его десериализоваться из массива JSON. Дорожка «[0]», строка 1, позиция 2.

нужно решение, как десериализовать эту строку массива, так как этот код работает нормально для массива ниже

[{
        "ElementName": "H1 ",
        "lat": 51.394319720562514,
        "lng": -109.99996662139893
    }, {
        "ElementName": "H1 ",
        "lat": 51.394319720562514,
        "lng": -109.99995589256287
}]

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Если вы все еще хотите сериализовать с вашим JSON, вы можете использовать, как показано ниже. Ниже работает для вашего JSON

JsonConvert.DeserializeObject<List<PointElement[]>>(testJson);
0 голосов
/ 02 сентября 2018

Если вы хотите создать список списка PointElement в качестве дескриптора json, то конвертер json должен преобразовать из Список> вместо Список :

var testPointList = JsonConvert.DeserializeObject<List<List<PointElement>>>(testNewJson)

Или, если вы хотите создать отдельный список PointElement , тогда вашему json нужно заключить в скобки [], который имеет вложенный массив:

[
    {
        "ElementName": "H1 ",
        "lat": 51.394319720562514,
        "lng": -109.99996662139893
    }, {
        "ElementName": "H1 ",
        "lat": 51.394319720562514,
        "lng": -109.99995589256287
    },    
    {
        "ElementName": "H2 ",
        "lat": 51.394319720562514,
        "lng": -109.99996662139893
    }, {
        "ElementName": "H2 ",
        "lat": 51.394319720562514,
        "lng": -109.99995589256287
    }
]

и тогда вы можете позвонить

var testPointList = JsonConvert.DeserializeObject<List<PointElement>>(testNewJson);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...