我正在尝试使用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