2015-04-03 3 views
0

Я видел некоторые другие вопросы, подобные этому, но это довольно сложные данные JSON, которые имеют объекты внутри объектов. Хотя JSON, с которым я работаю, никогда не статичен, я сомневаюсь, что это так сложно. Кроме того, это мой первый опыт использования JSON с C#, поэтому я немного незнакомец.Как я могу десериализовать данные JSON с помощью C#?

То, что я пытаюсь достичь, состоит в том, чтобы отделить данные, полученные от API, которые я запрашиваю с помощью WebRequest в C#.

{ 
    "johhny.debt": { 
     "id":35187540, 
     "name":"johnny.debt", 
     "profileIconId":786, 
     "Level":30, 
     "revisionDate":1428019045000 
    } 
} 

Возвращенные данные JSON подобны моделям.

Я хочу, чтобы иметь возможность получить доступ ко всем свойствам выше строки следующим образом:

ID:
Название:
~~
~~
~~ ... и так далее.

Я предполагаю, что для этого нужно сделать какой-то класс?

Вся помощь приветствуется, благодарю вас всех заранее.

+0

Просто определите класс, который отражает вашу структуру и «Deserialize» в этот класс. – DrKoch

+0

@DrKoch Верьте или нет, это то, с чем мне нужна помощь. –

+0

попробовал Google? http://www.codeproject.com/Tips/79435/Deserialize-JSON-with-C –

ответ

1

Установка Json.NET из NuGet

Install-Package Newtonsoft.Json 

https://www.nuget.org/packages/Newtonsoft.Json/

Declare класс для внутреннего объекта ({"id":..., "name": ... }):

public class InnerObject 
{ 
    [JsonProperty("id")] 
    public int Id { get; set; } 

    [JsonProperty("name")] 
    public string Username { get; set; } 

    [JsonProperty("profileIconId")] 
    public int ProfileIconId { get; set; } 

    [JsonProperty("level")] 
    public int Level { get; set; } 

    [JsonProperty("revisionDate")] 
    public string RevisionDate { get; set; } 
} 

Как вы можете видеть, вы можете указать, переименовать отображение из JSon полей в. Свойства сетевого объекта с использованием JsonPropertyAttribute.

Прочитайте JSON в Dictionary<string,InnerObject> и получить значение ключа "johhny.debt":

var dict = JsonConvert.DeserializeObject<Dictionary<string, InnerObject>>(jsonText); 
var johhny = dict["johhny.debt"]; 

Или, если ваша потребность всегда разобрать точное JSon свойство 'johhny.debt', вы могли бы создать корневой класс объекта:

public class RootObject 
{ 
    [JsonProperty("johhny.debt")] 
    public InnerObject JohhnyDept { get; set; } 
} 

И десериализации его:

var root = JsonConvert.DeserializeObject<RootObject>(jsonText); 
var johhny = root.JohhnyDebt; 
+0

Красиво объяснил. Я предполагаю, что JSON теперь deserliazed и помещен в объект, как бы я точно получить доступ к свойствам наилучшим образом? –

+0

dict ["info"]. Свойство возможно? –

+0

Простое свойство объекта. Пример: 'Console.Write (« Name is »+ johhny.Name);' –

1

Просто Создайте класс, как этот

public class RootObject 
{ 
    public int Id { get; set; } 
    public string name { get; set; } 
    public int profileIconId { get; set; } 
    public int Level { get; set; } 
    public string revisionDate { get; set; } 
} 

затем установить Json.NET и этот код на свой основной метод

var jsonObject=JsonConvert.DeserializeObject<RootObject>(jsonText); 

Это все

Update

var obj = JObject.Parse(json); 
    var RootObject = new RootObject() 
    { 
     Id = (int)obj["johhny.debt"]["id"], 
     Level = (int)obj["johhny.debt"]["Level"], 
     name = (string)obj["johhny.debt"]["name"], 
     profileIconId = (int)obj["johhny.debt"]["profileIconId"], 
     revisionDate = (string)obj["johhny.debt"]["revisionDate"] 
    }; 
+0

Думаю, вам нужен класс второго уровня. Первый уровень - «johny.dept». Это свойство содержит класс второго уровня. – DrKoch

+0

Выше ответ почему не работает @ Coder1409. –

+0

Формат вашего json изменился с вашего предыдущего сообщения, подождите секунду, я обновлю asnwer – Coder1409

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