Я пытаюсь создать приложение UWP, используя API RIOT для League of Legends.Deserialize json в классы C#
Когда я иду на свой сайт, чтобы генерировать JSON я получаю что-то вроде этого:
{"gigaxel": {
"id": 36588106,
"name": "Gigaxel",
"profileIconId": 713,
"revisionDate": 1451577643000,
"summonerLevel": 30
}}
Когда я выбираю этот JSON и скопировать его в новый класс, используя специальный метод пасты в Visual Studio 2015 я получаю эти классы с такими свойствами:
public class Rootobject
{
public Gigaxel gigaxel { get; set; }
}
public class Gigaxel
{
public int id { get; set; }
public string name { get; set; }
public int profileIconId { get; set; }
public long revisionDate { get; set; }
public int summonerLevel { get; set; }
}
Я создал новый класс LOLFacade
для подключения к RiotAPI:
public class LOLFacade
{
private const string APIKey = "secret :D";
public async static Task<Rootobject> ConnectToRiot(string user,string regionName)
{
var http = new HttpClient();
string riotURL = String.Format("https://{0}.api.pvp.net/api/lol/{0}/v1.4/summoner/by-name/{1}?api_key={2}",regionName, user, APIKey);
var response = await http.GetAsync(riotURL);
var result = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<Rootobject>(result);
}
}
Это кнопка метод обработчика событий:
Rootobject root = new Rootobject { gigaxel = new Gigaxel() };
root = await LOLFacade.ConnectToRiot("gigaxel","EUNE");
string name = root.gigaxel.name;
int level = root.gigaxel.summonerLevel;
InfoTextBlock.Text = name + " is level " + level;
я жестко закодировал regionName и пользователя для целей тестирования. Это работает с моим именем пользователя: «gigaxel».
Когда я пытаюсь другое имя, например, как «xenon94» я получаю исключение:
Object reference not set to an instance of an object.
Когда я изменить имя свойства в Rootobject от gigaxel к xenon94 так:
public class Rootobject
{
public Gigaxel xenon94 { get; set; }
}
Когда я перекомпилировать мой код работает для имени пользователя xenon94
, но он не работает для моего имени пользователя "gigaxel"
.
Я хочу, чтобы он работал для любого имени пользователя.
Взгляните на JObject Newtonsoft. Они позволяют вам анализировать json в динамический объект, с которым вы можете манипулировать, и получить интересующую вас деталь, см. Http://stackoverflow.com/questions/11047708/c-sharp-manipulating-json-data – user1778606