【发布时间】:2015-05-12 18:26:09
【问题描述】:
我想创建一个使用来自 football-data.org 的数据的 Windows 窗体应用程序。这是我第一次使用 restful/JSON 并且我被卡住了。
当我尝试获取 football-data.org 提供的所有联赛时,这是您从 football-data.org api 获得的响应:response
我使用以下代码来正确获取所有数据:(lbResultBox 是一个列表框)
private void btAllLeagues_Click(object sender, EventArgs e)
{
lbResultBox.Items.Clear();
List<Leagues> LL = GetLeagues("soccerseasons");
foreach (var item in LL)
{
lbResultBox.Items.Add(item.caption);
}
}
public static List<Leagues> GetLeagues(string endurl)
{
var syncClient = new WebClient();
var content = syncClient.DownloadString(baseurl + endurl);
return JsonConvert.DeserializeObject<List<Leagues>>(content);
}
public class Leagues
{
public IDictionary<string,LeagueLinks> _links { get; set; }
public string caption { get; set; }
public string league { get; set; }
public string year { get; set; }
public string numberOfTeams { get; set; }
public string numberOfGames { get; set; }
public string lastUpdated { get; set; }
}
public class LeagueLinks
{
public string href { get; set; }
}
这行得通。
但是当我尝试从一个联赛中获取所有球队时,这是我从 api 获得的response。我使用此代码:
private void btAllTeams_Click(object sender, EventArgs e)
{
List<LeagueTeams> LT = GetLeagueTeams("soccerseasons/" + id + "/teams");
}
public static List<LeagueTeams> GetLeagueTeams(string endurl)
{
var syncClient = new WebClient();
var content = syncClient.DownloadString(baseurl + endurl);
return JsonConvert.DeserializeObject<List<LeagueTeams>>(content);
}
public class LeagueTeams
{
public IDictionary<string, LeagueLinks> _links { get; set; }
public string count { get; set; }
public IDictionary<string, LeagueTeam> teams { get; set; }
}
public class LeagueTeam
{
public IDictionary<string, TeamLinks> _links { get; set; }
public string name { get; set; }
public string code { get; set; }
public string shortName { get; set; }
public string squadMarketValue { get; set; }
public string crestUrl { get; set; }
}
public class TeamLinks
{
public string href { get; set; }
}
但我收到以下错误:
Newtonsoft.Json.dll 中出现“Newtonsoft.Json.JsonSerializationException”类型的未处理异常 附加信息:无法将当前 JSON 数组(例如 [1,2,3])反序列化为 System.Collections.Generic.IDictionary`2[System.String,FootballTestApplication.LeagueTeam]' 类型,因为该类型需要 JSON 对象(例如 { "name":"value"}) 以正确反序列化。
当我查看 api 为我提供的响应时,我可以看到响应开始的方式有所不同。收集所有联赛时,它以括号 ([]) 开头和结尾,但在收集联赛中的球队时,它不以括号开头或结尾。当我自己添加括号时,我仍然得到错误。这就是我添加括号的方式:
return JsonConvert.DeserializeObject<List<LeagueTeams>>("["+content+"]");
我在这里做错了什么?
【问题讨论】: