【问题标题】:Problems with deserializing Json from RIOT Api in C# UWP在 C# UWP 中从 RIOT Api 反序列化 Json 的问题
【发布时间】:2015-12-31 20:20:44
【问题描述】:

我是堆栈溢出的新手,我是初学者。 我想做一个关于英雄联盟的应用程序,但我有一个问题。我只是不知道如何将 json 反序列化为对象。

这是我尝试过的

public class LOL
{
    public User user { get; set; }
}

public class User
{
    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; }
}

这些是我使用网站http://json2csharp.com/ 创建的类。

我刚刚把这些类的名字改成了我喜欢的名字

这是我调用 API 的另一个类

public class LOLFacade
{
    private const string APIKey = "secret :D";

    public async static Task<LOL> ConnectToRiot(string user)
    {
        var http = new HttpClient();
        string riotURL = String.Format("https://eune.api.pvp.net/api/lol/eune/v1.4/summoner/by-name/{0}?api_key={1}", user, APIKey);
        var response = await http.GetAsync(riotURL);

        var result = await response.Content.ReadAsStringAsync();

        return JsonConvert.DeserializeObject<LOL>(result);
    }
}

这是我使用 API 的地方

private async void GetUserInfo_Click(object sender, RoutedEventArgs e)
{
     LOL user = await LOLFacade.ConnectToRiot("gigaxel");
     string name = user.user.name;
     int level = user.user.summonerLevel;

     InfoTextBlock.Text = name + " is level " + level;
}

当我执行我的代码时,我总是得到这个错误:(:

对象引用未设置为对象的实例。

这是 Json:

{“千兆像素”:{ “身份证”:36588106, “名称”:“千兆像素”, "profileIconId": 713, “修订日期”:1451494377000, “召唤师等级”:30 }}

如果有人可以帮助我,我将不胜感激。我刚开始,我认为我在这段代码中犯了很多错误,但如果你能帮助我,我将不胜感激:D

【问题讨论】:

  • 在哪一行代码中出现此错误。
  • 这是一个很容易解决的异常。

标签: c# json


【解决方案1】:

您的 LOL 模型与您收到的 JSON 不匹配。

看看我对这个问题的回答:Deserialize JSON into Object C#

正确的模型是这样的

public class LOL
{
    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; }
}

【讨论】:

  • 谢谢。你的回答让我明白了很多事情:D
  • 再次感谢您,也祝您新年快乐:D
【解决方案2】:

尝试以下课程,而不是您的 LOL 课程

public class LOL
{
   public User gigaxel { get; set; }
}

【讨论】:

    【解决方案3】:

    除了其他用户指出的问题外,您的错误是由于您试图将 JSON 反序列化为您从未实例化的对象。您必须在反序列化之前创建对象:

    LOL LOLObj = new LOL { user = new User() };
    return JsonConvert.DeserializeObject<LOLObj>(result);
    

    【讨论】:

    • 非常感谢。它解决了我的问题:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 2023-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多