【问题标题】:Deserialize JSON Objects to .Net List (C#)将 JSON 对象反序列化为 .Net 列表 (C#)
【发布时间】:2017-01-13 10:07:49
【问题描述】:

我有一个 JSON 字符串(如下)。我想将其反序列化为 C# 对象并将数据作为列表获取。我的问题是,数据在 JSON 数组中不可用。我需要如何准备我的解决方案才能获取此结构中的数据:

  • 传感器
    • 传感器 1
    • 传感器 2
    • 传感器 3

对于传感器 1 - n 我只需要列表中的 GUID。后面的数据不相关。

在代码中,我将所有 GUID 替换为“GUID”

{
  "object": {
    "GUID": {
      "type": "sensor",
      "owner": "GUID",
      "time": 1482499665,
      "description": "Temperatursensor 1",
      "sdevice": "00003639",
      "model": "SOLUCON Industry Temperature",
      "tag": [
        "GUID",
        "GUID"
      ]
    },
    "GUID": {
      "type": "sensor",
      "owner": "GUID",
      "time": 1482499758,
      "description": "Wassersensor 1",
      "sdevice": "000056d9",
      "model": "SOLUCON Industry Water",
      "tag": [
        "GUID",
        "GUID"
      ]
    },
    "GUID": {
      "type": "sensor",
      "owner": "GUID",
      "time": 1482499797,
      "description": "Rauchmelder 1",
      "sdevice": "00008519",
      "model": "TG551A",
      "tag": [
        "GUID",
        "GUID"
      ]
    },
    "GUID": {
      "type": "sensor",
      "owner": "GUID",
      "time": 1483888365,
      "description": "SOLUCON Industry Multi 2",
      "sdevice": "0000d409",
      "model": "SOLUCON Industry Multi",
      "tag": [
        "GUID",
        "GUID"
      ]
    }
  },
  "status": "ok"
}

【问题讨论】:

    标签: c# json list serialization


    【解决方案1】:

    您可以像这样使用 Newtonsoft.Json 包:

    var jsonString = ...
    var result = JsonConvert.DeserializeObject<IDictionary<string, object>>(jsonString);
    var obj = (JObject)result["object"];
    foreach (var prop in obj.Properties())
    {
        Console.WriteLine(prop.Name);
    }
    

    这将打印 object 节点的所有 GUID 属性。

    如果你想获得额外的对象,你可以定义一个模型:

    public class Item
    {
        public string Type { get; set; }
    
        public Guid Owner { get; set; }
    
        public string Description { get; set; }
    
        public IList<string> Tag { get; set; }
    
        ...
    }
    

    然后你可以像这样得到传感器:

    foreach (var prop in obj.Properties())
    {
        Console.WriteLine(prop.Name);
    
        Sensor sensor = prop.Value.ToObject<Sensor>();
    }
    

    【讨论】:

      【解决方案2】:

      你提供的结构看起来像一个字典,所以它应该反序列化为:

      class Data
      {
          public Dictionary<Guid, Sensor> Object {get;set;}
      }
      

      您可以从中提取包含您的 Guid 列表的键列表 (data.Object.Keys)。

      【讨论】:

        猜你喜欢
        • 2012-03-07
        • 2016-05-30
        • 1970-01-01
        • 1970-01-01
        • 2022-12-13
        • 1970-01-01
        • 2017-01-28
        • 1970-01-01
        相关资源
        最近更新 更多