这是Dealing with fanart.tv webservice response JSON and C#
的后续内容因此,对于艺术家来说,你会得到一个响应,其中主要元素的名称与艺术家相同(因此你称为Metallica的web服务,它称为Metallica的根,你称之为Megadeth就称为Megadeth)
上一个问题解决了这个问题,但下一个阶段是专辑,最终包含这些动态命名元素的两个级别,因此搜索特定专辑并获得
{"Metallica":{"mbid_id":"65f4f0c5-ef9e-490c-aee3-909e7ae6b2ab","albums":{"f44f4f73-a714-31a1-a4b8-bfcaaf311f50":{"albumcover":[{"id":"51252","url":"http://assets.fanart.tv/fanart/music/65f4f0c5-ef9e-490c-aee3-909e7ae6b2ab/albumcover/kill-em-all-504c485914b25.jpg","likes":"2"}]}}}}
因此,您拥有与动态名称相同的顶级艺术家详细信息,但现在您拥有一个以MusicbrainzID命名的元素,然后是拇指的集合。
对于艺术家的详细信息,我定义了类
public class ArtistThumbs
{
public string Name { get; set; }
[JsonProperty("mbid_id")]
public string MusicBrainzID { get; set; }
[JsonProperty("artistthumb")]
public List<Thumb> Thumbs { get; set; }
}
和
public class Thumb
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("url")]
public string Url { get; set; }
[JsonProperty("likes")]
public string Likes { get; set; }
}
然后我可以使用
将艺术家反序列化为JSONvar artistthumbs = JsonConvert.DeserializeObject<Dictionary<string, Artist>>(json);
问题是如何为这些专辑做同样的事情?如果可能的话,我真的需要尝试坚持JsonConvert.DeserializeObject
并且真的想要反序列化到类但我无法弄清楚如何对类进行建模
答案 0 :(得分:0)
与其他问题相同。每当动态更改JSON对象的属性名称时,都需要使用Dictionary。您可以轻松扩展现有类以处理此问题。
首先,定义另一个类来保存专辑的封面大拇指列表:
class Album
{
[JsonProperty("albumcover")]
public List<Thumb> CoverThumbs { get; set; }
}
然后将以下属性添加到您的ArtistThumbs类:
[JsonProperty("albums")]
public Dictionary<string, Album> Albums { get; set; }
然后你可以像你一直那样完全反序列化:
var artistthumbs = JsonConvert.DeserializeObject<Dictionary<string, ArtistThumbs>>(json);
“相册”属性现在具有相册,其中词典中的每个键都是相册的“MusicbrainzID”,每个值都是相应的相册信息。