没有填充类属性
本文关键字:属性 填充 | 更新日期: 2023-09-27 18:15:15
我正在尝试填充这个类的属性:
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;
}