我正在尝试使用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属性必须为long,因为1387913628000(即您要尝试反序列化的值)超出了int范围。
  • 您的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;
    }
    

    10-07 23:17