2016-01-21 3 views
1

У меня есть проблема десериализации ответа JSON от API RIOT в C#. Я хочу, чтобы получить список «Champion» и API возвращает поток, как это:Deserialize JSON от Riot API C#

{ 
    "type":"champion", 
    "version":"6.1.1", 
    "data":{ 
     "Thresh":{ 
     "id":412, 
     "key":"Thresh", 
     "name":"Thresh", 
     "title":"the Chain Warden" 
     }, 
     "Aatrox":{ 
     "id":266, 
     "key":"Aatrox", 
     "name":"Aatrox", 
     "title":"the Darkin Blade" 
     },... 
    } 
} 

Все данные имеет те же атрибуты (идентификатор, ключ, имя и название), поэтому я создаю класс чемпионов:

public class Champion 
    { 
     public int id { get; set; } 
     public string key { get; set; } 
     public string name { get; set; } 
     public string title { get; set; } 
    } 

Мне нужна ваша помощь, потому что я не знаю, как десериализовать эти данные ... Мне нужно создать класс Root с атрибутами типа, версии и данных (данные - список чемпионов)? Я наблюдал за используемым NewtonSoft Json, но я не нашел пример, который мне помог.

ответ

2

Вы можете использовать следующий корневой объект (точнее объект передачи данных), чтобы получить чемпион от API. Это вернет всех чемпионов, не создавая класс для каждого чемпиона.

public class RootChampionDTO 
{ 
    public string Type { get; set; } 
    public string Version { get; set; } 
    public Dictionary<string, Champion> Data { get; set; } 
} 

затем с помощью Json.NET Newtsonsoft, вы бы десериализации, используя следующие:

JsonConvert.DeserializeObject<RootChampionDTO>(string json); 
+0

Только примечание с Json.NET, если вас не интересуют свойства типа или версии, вы можете опустить их из класса 'RootChampionDTO', и он все равно будет десериализован без каких-либо проблем. – Seaal

0

Рассмотрим такие классы:

public class ResponseModel 
{ 
    public string Type { get; set; } 

    public string Version { get; set; } 

    public Dictionary<string, Champion> Data { get; set; } 
} 

public class Champion 
{ 
    public int Id { get; set; } 

    public string Key { get; set; } 

    public string Name { get; set; } 

    public string Title { get; set; } 
} 

И после того, как пакет использования Newtonsoft.Json NuGet десериализовать ваш json:

using Newtonsoft.Json; 

var result = JsonConvert.DeserializeObject<ResponseModel>(json); 

Обратите внимание, что настройки по умолчанию Newtonsoft.Json позволяют правильно анализировать свойства camelCase из json в свойства PascalCase в классах C#.