簡體   English   中英

在C#UWP中從RIOT Api反序列化Json的問題

[英]Problems with deserializing Json from RIOT Api in C# UWP

我是堆棧溢出的新手,並且是一名初學者。 我想制作一個關於英雄聯盟的應用程序,但是我有一個問題。 我只是不知道如何將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;
}

當我執行代碼時,我總是會收到此錯誤:(:

你調用的對象是空的。

這是傑森:

{“ gigaxel”:{“ id”:36588106,“ name”:“ Gigaxel”,“ profileIconId”:713,“ revisionDate”:1451494377000,“ summonerLevel”:30}}

如果有人可以幫助我,我將非常感激。 我剛開始,我認為我在這段代碼中犯了很多錯誤,但是如果您能幫助我,我將非常感謝:D

嘗試以下課程而不是您的LOL課程

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

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

在以下問題中尋找我的答案:將JSON反序列化為對象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; }
}

除了其他用戶指出的問題之外,您的錯誤還歸因於您試圖將JSON反序列化為從未實例化的對象的事實。 您必須在反序列化之前創建對象:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM