Десериализовать JSON из Riot API C#
У меня есть проблема с десериализацией ответа JSON от RIOT API в C#. Я хочу получить список "Чемпион" и API вернуть поток, как это:
{
"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, но я не нашел пример, который мне помог.
3 ответа
Вы можете использовать следующий корневой объект (точнее, Data Transfer Object), чтобы получить победителей из 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);
Рассмотрим такие классы:
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; }
}
И после использования пакета nugets Newtonsoft.Json для десериализации вашего json:
using Newtonsoft.Json;
var result = JsonConvert.DeserializeObject<ResponseModel>(json);
Обратите внимание, что настройки по умолчанию Newtonsoft.Json позволяют вам правильно анализировать свойства camelCase из json в свойства PascalCase в классах C#.
Если вы хотите использовать NewtonSoft:
JsonConvert.DeserializeObject<RootObject>(string json);
Документация по Json .NET: http://www.newtonsoft.com/json/help/html/SerializingJSON.htm