简体   繁体   中英

Getting NULL values while deserializing complex json

My project has a 3rd party web API that returns a json string in the following format (including the starting and ending curly braces):

{ 
   "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"
   }
}

I want to deserialize it into ac# class object for further processing. I made the following class structure for the same:

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; }
}

and I am trying the following code to deserialize:

JavaScriptSerializer jSerObj = new JavaScriptSerializer();

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

But every time it is showing NULL values assigned to each property of the class after the Deserialize() method is called. Please help me on this.

Your json is not in list format so deserializing to List<> isn't work

So you need to deserialize it into Dictionary<string, GPSData> like

JavaScriptSerializer jSerObj = new JavaScriptSerializer();

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

Usage:

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

Also, you can list all your GPSData from above dictionary like,

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

Output: (From Debugger)

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM