从英雄联盟API中估算JSON时,错误



我正在尝试使用RiotGames API。我有JSON数据,我需要将此JSON验证为C#类,但我会遇到一个错误:

newtonsoft.json.jsonerialization exception:'无法当前的json对象(例如{" name":" name":" value"})中'一个json阵列(例如[1,2,3])正确地序列化。 要解决此错误要么将JSON更改为JSON阵列(例如[1,2,3])或更改供应类型,因此它是正常的.NET类型(例如,不是像Integer这样的原始类型,而不是类型的集合类型可以从JSON对象进行值得序列化的数组或列表。JonobjectAttribute也可以将其添加到类型中,以强迫其从JSON对象进行验证。 路径" datas.aatrox",第1行,位置85。'

我的课:

    public class JsonRoot
    {
        public string type { get; set; }
        public string format { get; set; }
        public string version { get; set; }
        public List<Heroes> datas { get; set; }
    }
    public class Heroes
    {
        public HeroesData Name { get; set; }
    }
    public class HeroesData
    {
        public string version { get; set; }
        public string id { get; set; }
        public string key { get; set; }
        public string name { get; set; }
        public string title { get; set; }
        public HeroImage image { get; set; }
    }
    public class HeroImage
    {
        public string full { get; set; }
        public string sprite { get; set; }
        public string group { get; set; }
        public override string ToString()
        {
            return full;
        }
    }

c#代码:

var json = new WebClient().DownloadString("http://ddragon.leagueoflegends.com/cdn/6.24.1/data/en_US/champion.json");
json = json.Replace("data", "datas");
JsonRoot jr = JsonConvert.DeserializeObject<JsonRoot>(json); // this line has the error

您正在遇到此错误,因为您使用的是List<Heroes>的CC_1,但是该属性不是JSON中的数组。您需要使用Dictionary<string, HeroesData>。英雄的名字将是字典的钥匙。另外,如果您要与JSON中的特定属性使用其他名称,则可以使用[JsonProperty]属性,如下所示。使用string.Replace尝试更改JSON以适合您的课程并不是一个好主意,因为您最终可能会替换您不打算的事情。

public class JsonRoot
{
    public string type { get; set; }
    public string format { get; set; }
    public string version { get; set; }
    [JsonProperty("data")]
    public Dictionary<string, HeroesData> heroes { get; set; }
}

小提琴:https://dotnetfiddle.net/kuksrk

相关内容

  • 没有找到相关文章

最新更新