Получение значений NULL при десериализации сложного json - PullRequest
0 голосов
/ 07 февраля 2019

Мой проект имеет сторонний веб-API, который возвращает строку json в следующем формате (включая начальные и конечные фигурные скобки):

{ 
   "866968030210604":{
      "dt_server":"2019-02-07 12:21:27",
      "dt_tracker":"2019-02-07 12:21:27",
      "lat":"28.844968",
      "lng":"76.858502",
      "altitude":"0",
      "angle":"154",
      "speed":"9",
      "params":{
         "pump":"0",
         "track":"1",
         "bats":"1",
         "acc":"0",
         "batl":"4"
      },
      "loc_valid":"1"
   },
   "866968030221205":{
      "dt_server":"2019-02-07 12:20:24",
      "dt_tracker":"2019-02-07 12:19:41",
      "lat":"28.845904",
      "lng":"77.096063",
      "altitude":"0",
      "angle":"0",
      "speed":"0",
      "params":{
         "pump":"0",
         "track":"1",
         "bats":"1",
         "acc":"0",
         "batl":"4"
      },
      "loc_valid":"1"
   },
   "866968030212030":{
      "dt_server":"0000-00-00 00:00:00",
      "dt_tracker":"0000-00-00 00:00:00",
      "lat":"0",
      "lng":"0",
      "altitude":"0",
      "angle":"0",
      "speed":"0",
      "params":null,
      "loc_valid":"0"
   }
}

Я хочу десериализовать его в объект класса ac # длядальнейшая обработка.Я сделал следующую структуру класса для того же самого:

class Params
{
    public string pump { get; set; }
    public string track { get; set; }
    public string bats { get; set; }
    public string acc { get; set; }
    public string batl { get; set; }
}

class GPSData
{
    public string dt_server { get; set; }
    public string dt_tracker { get; set; }
    public string lat { get; set; }
    public string lng { get; set; }
    public string altitude { get; set; }
    public string angle { get; set; }
    public string speed { get; set; }
    public Params ObjParams { get; set; }
    public string loc_valid { get; set; }
}

и пытаюсь выполнить следующий код для десериализации:

JavaScriptSerializer jSerObj = new JavaScriptSerializer();

List<GPSData> lstGPSData = (List<GPSData>)jSerObj.Deserialize(json, typeof(List<GPSData>));

Но каждый раз, когда он показывает значения NULL, назначенные каждому свойствукласса после вызова метода Deserialize ().Пожалуйста, помогите мне в этом.

1 Ответ

0 голосов
/ 07 февраля 2019

Ваш json не в формате списка, поэтому десериализация до List<> не работает

Так что вам нужно десериализовать его в Dictionary<string, GPSData> как

JavaScriptSerializer jSerObj = new JavaScriptSerializer();

Dictionary<string, GPSData> lstGPSData = (Dictionary<string, GPSData>)jSerObj.Deserialize(json, typeof(Dictionary<string, GPSData>));

Использование:

foreach (var item in lstGPSData)
{
    string key = item.Key;
    GPSData gPSData = item.Value;
}

Кроме того, вы можете перечислить все свои GPSData из словаря выше, например,

List<GPSData> gPSDatas = lstGPSData.Values.ToList();

Вывод: (из отладчика)

enter image description here

...