我试图在C#中填充一个列表,但这些值不会出现在数组中 – 尽管在我尝试使用数组索引设置变量(因为它的范围超出范围)时,它并没有引发错误.
这是我在调试时看到的确切的返回字符串strJSON.
strJSON "{\"id\":34379899,\"name\":\"Revelation22\",\"profileIconId\":547,\"summonerLevel\":30,\"revisionDate\":1387913628000}"
为什么列表(数组)不填充?
这是KeyValue.cs的代码(老实说,我不知道为什么需要另一个类)
namespace LoLSummoner { public class KeyValue { public int id {get; set;} public string name {get; set;} public int profileIconId {get; set;} public int summonerLevel {get; set;} public int revisionDate {get; set;} } }
这是Summoner.svc.cs的代码
namespace LoLSummoner { public class Summoner : ISummoner { public int GetSummonerID(string SummonerName) { int summonerId = 0; WebClient client = new WebClient(); string strJSON = client.DownloadString("http://prod.api.pvp.net/api/lol/na/v1.2/summoner/by-name/" + SummonerName + "?api_key=xxxx"); JavaScriptSerializer js = new JavaScriptSerializer(); KeyValue[] arrJSON = js.Deserialize<List<KeyValue>>(strJSON).ToArray(); summonerId = Convert.ToInt32(arrJSON.GetValue(0)); return summonerId; } } }
解决方法
>您的RevisionDate属性必须很长,因为1387913628000,这是您尝试反序列化的值超过int范围.
>您的JSON包含只有一个KeyValue对象的信息,而不是那里的数组,因此您必须将其反序列化为KeyValue,不需要KeyValue []:
>您的JSON包含只有一个KeyValue对象的信息,而不是那里的数组,因此您必须将其反序列化为KeyValue,不需要KeyValue []:
KeyValue item = js.Deserialize<KeyValue>(strJSON);
>使用KeyValue实例,您可以使用标准属性语法返回ID:
return item.id;
我发现这个代码工作:
public class KeyValue { 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; } }
static void Main(string[] args) { var input = @"{""id"":34379899,""name"":""Revelation22"",""profileIconId"":547,""summonerLevel"":30,""revisionDate"":1387913628000}"; JavaScriptSerializer js = new JavaScriptSerializer(); var item = js.Deserialize<KeyValue>(input); var summonerId = item.id; }