我想使用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