没有填充类属性



我正在尝试填充这个类的属性:

public class Summoner   
{
    public int id { get; set; }
    public string name { get; set; }
    public int profileIconId { get; set; }
    public int summonerLevel { get; set; }
    public long revisionDate { get; set; }
}

使用这个JSON:

{"SummonerName":{"id":445312515,"name":"SummonerName","profileIconId":28,"summonerLevel":30,"revisionDate":140642312000}}

使用以下JSON.net:

public static Summoner getRecentGames(string summonerId)
    {
        Summoner summoner = new Summoner();
        try
        {
            using (var webClient = new System.Net.WebClient())
            {
                var json = webClient.DownloadString("https://eu.api.pvp.net/api/lol/euw/v1.4/summoner/by-name/"+summonerId+"?api_key="+api_key);
                webClient.Dispose();
                summoner = JsonConvert.DeserializeObject<Summoner>(json);
                return summoner;
            }
        }
        catch(Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        return null;
    }

属性从来没有分配值,它是否与它们在JSON中的外部对象有关,当我需要的值在内部对象内时?

我是一个新的程序员,所以抱歉,如果这是一个愚蠢的错误,谢谢。

JSON包含的SummonerName属性需要一个包装器:

public class Wrapper
{
    public Summoner SummonerName { get; set; }
}
你要将JSON反序列化为:
public static Summoner getRecentGames(string summonerId)
{
    try
    {
        using (var webClient = new System.Net.WebClient())
        {
            var json = webClient.DownloadString("https://eu.api.pvp.net/api/lol/euw/v1.4/summoner/by-name/"+summonerId+"?api_key="+api_key);
            var wrapper = JsonConvert.DeserializeObject<Wrapper>(json);
            return wrapper.SummonerName;
        }
    }
    catch(Exception e)
    {
        Console.WriteLine(e.ToString());
    }
    return null;
}

还请注意,您的webClient实例被包装在using指令中-在其上手动调用.Dispose()方法完全没有意义-这就是using语句的全部目的。


更新:

似乎SummonerName属性在JSON中是动态的(这是一个非常糟糕的API设计,但无论如何),这意味着你不能使用强类型包装器。

你可以这样处理:

using (var webClient = new System.Net.WebClient())
{
    var json = webClient.DownloadString("https://eu.api.pvp.net/api/lol/euw/v1.4/summoner/by-name/"+summonerId+"?api_key="+api_key);
    var summoner = JObject.Parse(json).Values().First().ToObject<Summoner>();
    return summoner;
}

相关内容

  • 没有找到相关文章

最新更新