/// <summary> /// JToken constructor /// </summary> /// <param name="token"></param> public Playlist(JToken token) { /* Simple fields */ Collaborative = token.Value <bool?>("collaborative") ?? false; Description = token.Value <string>("description") ?? string.Empty; Href = token.Value <string>("href") ?? string.Empty; Id = token.Value <string>("id") ?? string.Empty; Name = token.Value <string>("name") ?? string.Empty; Public = token.Value <bool?>("public") ?? true; Snapshot_Id = token.Value <string>("snapshot_id") ?? string.Empty; Uri = token.Value <string>("uri") ?? string.Empty; /* External URLS handling */ JObject exturls = token.Value <JObject>("external_urls"); if (exturls != null) { foreach (JProperty x in exturls.Properties()) { External_Urls.Add(x.Name, x.Value <JToken>().ToString()); } } /* Follower Handling */ JObject follower = token.Value <JObject>("followers"); if (follower != null) { Followers = new Followers(follower); } /* Image Handling */ JArray images = token.Value <JArray>("images"); if (images != null) { List <Image> ims = new List <Image>(); foreach (JObject jobj in images.Values <JObject>()) { Image i = new Image(jobj); ims.Add(i); } Images = ims.ToArray(); } /* Owner Handling */ JToken owner = token.Value <JToken>("owner"); if (owner != null && owner.HasValues) { Owner = new User(owner); } /* Track Handling */ JObject tracks = token.Value <JObject>("tracks"); Total = tracks.Value <int?>("total") ?? -1; IEnumerable <JToken> trackValues = tracks.Values().ToList(); // >2 properties means its really full of tracks if (tracks.Values().Count() > 2) { //TODO handle tracks //Paging a bitch, yo } }