簡體   English   中英

將JSON對象反序列化為.Net列表(C#)

[英]Deserialize JSON Objects to .Net List (C#)

我有一個JSON-String(如下)。 我想將其反序列化為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"
}

您可以像這樣使用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>();
}

您提供的結構看起來像字典,因此應反序列化為:

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

從中可以提取將包含data.Object.Keys列表的鍵列表( data.Object.Keys )。

暫無
暫無

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

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