2015-07-03 10 views
-2

Я хочу разобрать следующий json для словаря или объекта класса, я использую JSON.net, но я не понимаю, как создать структуру словаря или даже структуру класса для его анализа на объект. Я видел синтаксический анализ json-массива с использованием JObject, но я не понимаю, как реализовать его для этого типа 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

Добро пожаловать в StackOverflow! Что вы сделали до сих пор? Что/не сработало? – Simon

+0

Создайте свой класс в соответствии с этим JSon. После этого проанализируйте его 'var res = (YourClass) Newtonsoft.Json.JsonConvert.DeserializeObject (s, typeof (YourClass));' –

+0

Использование System.Web.Script.Serialization.JavaScriptSerializer 'Словарь <строка, объект> JSONDict = (словарь ) (новый 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 типирование раньше, не пугайтесь, если ваш IntelliSense не кажется, Работа. Это связано с тем, что все свойства и значения известны только во время выполнения.

Смежные вопросы