Десериализовать 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

Другие вопросы по тегам