2017-01-13 94 views
0

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

  • 传感器
    • 传感器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" 
} 

回答

3

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

结构你提供看起来像一本字典所以它应该反序列化到:

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

从这里你可以提取键列表(data.Object.Keys),它将包含您的Guid列表。