JSON反序列化解析C#

JSON反序列化解析C#,c#,.net,arrays,json,dictionary,C#,.net,Arrays,Json,Dictionary,我想将下面的json解析为dictionary或class对象,我使用的是json.net,但我不知道如何创建dictionary结构,甚至不知道如何创建class结构将其解析为object。我见过使用JObject解析json数组,但我不知道如何为这种json结构实现它 { "room": 1, "meta": {}, "devices": [ { "asset": { "id": "asset_big_lamp_1" },

我想将下面的json解析为dictionary或class对象,我使用的是json.net,但我不知道如何创建dictionary结构,甚至不知道如何创建class结构将其解析为object。我见过使用JObject解析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#4.0或更新版本,则可以利用
动态
类型

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


如果您以前从未使用过
dynamic
打字,如果您的IntelliSense似乎不起作用,请不要害怕。这是因为所有属性和值仅在运行时已知。

您的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);
var obj=JsonConvert.DeserializeObject(jsonString);

欢迎来到stackoverflow!到目前为止你做了什么?什么有效/无效?根据此JSon创建类。解析后
var res=(YourClass)Newtonsoft.Json.JsonConvert.DeserializeObject(s,typeof(YourClass))使用System.Web.Script.Serialization.JavaScriptSerializer
字典JSONDict=(字典)(新的System.Web.Script.Serialization.JavaScriptSerializer()).DeserializeObject(JSON)
var obj = JsonConvert.DeserializeObject<Root>(jsonString);