2015-07-03 54 views
-2

我想解析下面的json到字典或类对象,我正在使用JSON.net,但我不知道如何创建字典结构甚至是类结构来解析它到对象中。我已经看到使用JObject json数组解析,但我没有得到如何实现这种类型的json结构。JSON反序列化解析C#

{ 
    "room": 1, 
    "meta": {}, 
    "devices": [ 
    { 
     "asset": { 
     "id": "asset_big_lamp_1" 
     }, 
     "device_name": "Lamp_1", 
     "device_type": "light", 
     "power_usage": "low", 
     "ui_coordinates": { 
     "x": "3.5", 
     "y": "-2.6", 
     "z": "-3.6" 
     }, 
     "transducers": { 
     "relay": "ARE00", 
     "dimmer": "null" 
     } 
    } 
+3

欢迎计算器!到目前为止你做了什么?什么有/没有工作? – Simon

+0

根据这JSon创建你的课堂。解析后'var res =(YourClass)Newtonsoft.Json.JsonConvert.DeserializeObject(s,typeof(YourClass));' –

+0

使用System.Web.Script.Serialization.JavaScriptSerializer'Dictionary JSONDict =(Dictionary )(new System.Web.Script.Serialization.JavaScriptSerializer())。DeserializeObject(JSON);' –

回答

0

您的JSON不是有效的JSON。它应该是:

{ 
    "room": 1, 
    "meta": { 

    }, 
    "devices": [ 
    { 
     "asset": { 
     "id": "asset_big_lamp_1" 
    }, 
    "device_name": "Lamp_1", 
    "device_type": "light", 
    "power_usage": "low", 
    "ui_coordinates": { 
     "x": "3.5", 
     "y": "-2.6", 
     "z": "-3.6" 
    }, 
    "transducers": { 
     "relay": "ARE00", 
     "dimmer": "null" 
    } 
    } 
    ] 
} 

它由以下类在C#中表示:

public class Root 
{ 
    public int room { get; set; } 
    public Meta meta { get; set; } 
    public Device[] devices { get; set; } 
} 

public class Meta 
{ 
} 

public class Device 
{ 
    public Asset asset { get; set; } 
    public string device_name { get; set; } 
    public string device_type { get; set; } 
    public string power_usage { get; set; } 
    public Ui_Coordinates ui_coordinates { get; set; } 
    public Transducers transducers { get; set; } 
} 

public class Asset 
{ 
    public string id { get; set; } 
} 

public class Ui_Coordinates 
{ 
    public string x { get; set; } 
    public string y { get; set; } 
    public string z { get; set; } 
} 

public class Transducers 
{ 
    public string relay { get; set; } 
    public string dimmer { get; set; } 
} 

然后你可以用下面的代码反序列化JSON字符串:

var obj = JsonConvert.DeserializeObject<Root>(jsonString); 
2

如果您使用的是C#4.0或更新版本,则可以利用dynamic类型。

这是使用JSON序列化/反序列化一个众所周知的库(JSON.NET)的例子:

dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(yourJsonString); 

// data.room contains 1 
// data.devices[0].device_name contains "Lamp_1" 

如果你从来没有使用之前dynamic打字,如果你的智能感知不似乎并没有得到害怕工作。这是因为所有的属性和值只在运行时才知道。