我想使用fanart.tv webservice API,但有几个问题。 我正在使用Json.Net(Newtonsoft.Json)和其他Web服务,我已经反序列化JSON直接回应到C#对象。处理fanart.tv webservice响应JSON和C#
这里的问题是元素名称正在改变。例如。如果我搜索Metallica的艺术家大拇指,你会得到
{"Metallica":{"mbid_id":"65f4f0c5-ef9e-490c-aee3-909e7ae6b2ab","artistthumb": [{"id":"36181","url":"http://assets.fanart.tv/fanart/music/65f4f0c5-ef9e-490c-aee3-909e7ae6b2ab/artistthumb/metallica-4fd83b0129f83.jpg","likes":"1"},...]}}
所以根元素叫做Metallica。显然搜索另一个艺术家,你会得到不同的元素名称。试图反序列化这一个对象后,我放弃了,因为在现实中,所有我需要的是字符串(网址)的列表,我尝试处理JSON
var obj = _downloader.Download<JObject>(url);
if (obj != null)
{
if (obj.HasValues)
{
var fanartArtist = (JProperty)obj.First;
if (fanartArtist.HasValues)
{
var thumbs = fanartArtist.Value[SearchSubTypeToString(subType)];
if (thumbs.HasValues)
{
thumbUrls.AddRange(thumbs.Select(thumb => thumb["url"].ToString()));
}
}
}
}
的正常工作时,有一个回应,但如果没有拇指web服务返回null,该代码失败
Unable to cast object of type 'Newtonsoft.Json.Linq.JValue' to type 'Newtonsoft.Json.Linq.JObject'.
要稍微事情复杂化我之类的设限和理想,我需要使用
JsonConvert.DeserializeObject<TE>(json);
所以问题是什么是解决这两个问题的最佳方法?
您获得的数据实际上由一个带有单个键的字典组成:“Metallica”,其值包含所有其余数据。 – Bobson