簡體   English   中英

反序列化復雜json時獲取NULL值

[英]Getting NULL values while deserializing complex json

我的項目有一個第三方Web API,該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>));

但是每次調用Deserialize()方法后,每次顯示分配給該類的每個屬性的NULL值。 請幫我。

您的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();

輸出:(來自調試器)

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM