如何反序列化嵌套的json

时间:2017-08-25 02:59:39

标签: c# json json.net

我有两个API:

  1. GetDeviceInfo(string addr),返回单个设备的JSON数据,如下所示:

    {
      "DeviceName": "TCatPlcCtrl",
      "TurbineName": "WTG2",
      "State": "run",
      "TurbineType": "1500",
      "Version": "2.11.1816"
    }
    
  2. GetAllDeviceInfo(),返回包含IP地址的设备数据集合:

    {
      "192.168.151.1": {
        "DeviceName": "TCatPlcCtrl",
        "TurbineName": "WTG2",
        "State": "run",
        "TurbineType": "1500",
        "Version": "2.11.1816"
      },
      "192.168.151.33": {
        "DeviceName": "TCatPlcCtrl",
        "TurbineName": "WTG2",
        "State": "stop",
        "TurbineType": "1500",
        "Version": "2.11.2216"
      }
    }
    
  3. 对于API GetDeviceInfo(string addr),我尝试了NewtonSoft.Json,并通过调用JsonConvert.DeserializeObject<ModelClass>(content)获得了正确的数据。

    但我不知道如何反序列化GetAllDeviceInfo() API返回的嵌套JSON数据。

1 个答案:

答案 0 :(得分:1)

假设您的模型类定义如下:

public class DeviceInfo
{
    public string DeviceName { get; set; }
    public string TurbineName { get; set; }
    public string State { get; set; }
    public string TurbineType { get; set; }
    public string Version { get; set; }
}

然后,对于第一个JSON,您可以像这样反序列化:

var device = JsonConvert.DeserializeObject<DeviceInfo>(json);

对于第二种情况,您可以反序列化为字典,其中键是IP地址,值是设备:

var dict = JsonConvert.DeserializeObject<Dictionary<string, DeviceInfo>>(json2);

演示小提琴:https://dotnetfiddle.net/Hs9OJo