gpt4 book ai didi

c# - 将json反序列化为c#类

转载 作者:太空狗 更新时间:2023-10-29 17:51:47 26 4
gpt4 key购买 nike

我正在尝试使用英雄联盟的 RIOT API 制作 UWP 应用。

当我去他们的网站生成 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"
我希望它适用于任何给定的用户名。

最佳答案

问题是 json 对象有一个命名 gigaxel 的属性。您将必须检索内部对象,如下所示:

var json = JsonConvert.DeserializeObject<JObject>(x).First.First;

从那里,您可以通过索引器获取名称和其他内容:

string name = (string)json["name"];
int summonerlevel = (int)json["summonerLevel"]

具体来说,JsonConvert.DeserializeObject(x) 将返回一个只有一个对象的新 JObject。因此 First 调用。而且,这个对象只有一个属性,名为“gigaxel”。该属性的值是我们需要的信息,例如名称。无论属性的名称是什么,我们都希望检索此信息。因此,我们再次调用 First 来检索该属性的值。

关于c# - 将json反序列化为c#类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34556133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com