我正在尝试使用 fanart.tv 网络服务 API,但有几个问题。我正在使用 Json.Net (Newtonsoft.Json) 和其他 Web 服务,我已将 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);
所以问题是解决这两个问题的最佳方法是什么?