From ceb16a96fa31f3c9ecf04258e374fad1d7a2800e Mon Sep 17 00:00:00 2001 From: Rikki Tooley Date: Wed, 8 Oct 2014 02:09:51 +0100 Subject: [PATCH] Check for token type instead of handling an exception --- src/IF.Lastfm.Core/Objects/Album.cs | 40 ++++++++++++++++------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/src/IF.Lastfm.Core/Objects/Album.cs b/src/IF.Lastfm.Core/Objects/Album.cs index c873a01..6c2fc03 100644 --- a/src/IF.Lastfm.Core/Objects/Album.cs +++ b/src/IF.Lastfm.Core/Objects/Album.cs @@ -40,31 +40,35 @@ internal static Album ParseJToken(JToken token) { var a = new Album(); - try + var artistToken = token["artist"]; + if (artistToken.Type == JTokenType.String) { a.ArtistName = token.Value("artist"); a.ArtistId = token.Value("id"); - - var tracksToken = token.SelectToken("tracks").SelectToken("track"); - if (tracksToken != null) - { - a.Tracks = tracksToken.Children().Select(trackToken => Track.ParseJToken(trackToken, a.Name)); - } - - var tagsToken = token.SelectToken("toptags").SelectToken("tag"); - if (tagsToken != null) - { - a.TopTags = tagsToken.Children().Select(Tag.ParseJToken); - } } - catch + else if (artistToken.Type == JTokenType.Object) { - // for when artist is not a string but a Artist object - var artist = token.SelectToken("artist").ToObject(); - a.ArtistName = artist.Name; - a.ArtistId = artist.Mbid; + a.ArtistName = artistToken.Value("name"); + a.ArtistId = artistToken.Value("mbid"); } + var tracksToken = token.SelectToken("tracks"); + if (tracksToken != null) + { + var trackToken = tracksToken.SelectToken("track"); + if (trackToken != null) + { + a.Tracks = tracksToken.Children().Select(t => Track.ParseJToken(t, a.Name)); + } + } + + var tagsToken = token.SelectToken("toptags"); + if (tagsToken != null) + { + var tagToken = tagsToken.SelectToken("tag"); + a.TopTags = tagToken.Children().Select(Tag.ParseJToken); + } + a.ListenerCount = token.Value("listeners"); a.Mbid = token.Value("mbid"); a.Name = token.Value("name");