1

Проблема при десериализации JSON полученного из SDK в Visual Studio

Topic: Проблема при десериализации JSON полученного из SDK в Visual Studio

Добрый день!
Имеется проблема по получению отчетов.

В документации http://sdk.wialon.com/wiki/ru/local/rem … es/reports
в части "получение данных из таблиц"

прямо в их примере, на запрос
https://hst-api.wialon.com/wialon/ajax. … _rows&
        params={
                "tableIndex":0,
                "indexFrom":0,
                "indexTo":0
        }&sid=<your_sid>

получается результат
[{
    "n": 0,
    "i1": 108,
    "i2": 214,
    "t1": 1357047418,
    "t2": 1357056357,
    "d": 3,
    "c": ["1", "2013-01-01", {
        "t": "17:36:58",
        "y": 53.9097984,
        "x": 27.4998528
    }, {
        "t": "Берута ул., Минск",
        "y": 53.9097984,
        "x": 27.4998528
    }, {
        "t": "20:05:57",
        "y": 53.8847872,
        "x": 27.5675072
    }, {
        "t": "Маяковского ул., Минск",
        "y": 53.8847872,
        "x": 27.5675072
    }, "", "0:11:15", "0:00:00", "0.00 км", "0.00 км", "0 км\/ч", {
        "t": "72 км\/ч",
        "y": 53.9070656,
        "x": 27.5216608
    }, "3", "0 л", "0 л"]
}]

Этот результат содержит неименованные поля "", "0:11:15", "0:00:00", "0.00 км", "0.00 км", "0 км\/ч", которые десериализовать не получается.

Как Visual Studio, так и онлайн генераторы  типа json2sharp генерируют класс
   public class TableRepObject
    {
        public Class1[] Property1 { get; set; }
    }

    public class Class1
    {
        public int n { get; set; }
        public int i1 { get; set; }
        public int i2 { get; set; }
        public int t1 { get; set; }
        public int t2 { get; set; }
        public int d { get; set; }
        public object[] c { get; set; }
    }

При попытке десериализовать полученный результат

TableRepObject tblRep = JsonConvert.DeserializeObject<TableRepObject>(PageText);

получаем исключение с текстом

{"Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'Entity.TableRepObject' because the type requires a JSON object (e.g. {\"name\":\"value\"}) to deserialize correctly.\r\nTo fix this error either change the JSON to a JSON object (e.g. {\"name\":\"value\"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.\r\nPath '', line 1, position 1."}

Т.е. требуется, чтобы все поля были поименованы.

Что тут можно сделать?

ООО "Навитрейд-42"
www.navitrade.pro
г.Кемерово
Ринат Садыков
2

Проблема при десериализации JSON полученного из SDK в Visual Studio

Re: Проблема при десериализации JSON полученного из SDK в Visual Studio

Добрый день

В приведенном JSON'е объект завёрнут в массив. Попробуйте парсить его как массив, а не как объект. Примерно так

var myobjList = JSON.Deserialize<List<Class1>>(PageText);

Код отсюда http://stackoverflow.com/questions/1776 … -into-type

PS на c# никогда не кодил

3

Проблема при десериализации JSON полученного из SDK в Visual Studio

Re: Проблема при десериализации JSON полученного из SDK в Visual Studio

shmi Спасибо, всё заработало