internal static YPlaylistFavoritesResponse FromJson(JToken json)
 {
     return(new YPlaylistFavoritesResponse
     {
         Success = json["success"].ToObject <bool>(),
         CountsTracks = YCountsTracks.FromJson(json["countsTracks"]),
         Tracks = json["tracks"].Select(YTrack.FromJson).ToList(),
         ContestTracksIds = json["contestTracksIds"].Select(x => YTrackAlbumPair.FromJson(x)).ToList(),
         TrackIds = json["trackIds"].Select(x => x.ToObject <string>()).ToList(),
         Verified = json["verified"].ToObject <bool>(),
         Owner = YOwner.FromJson(json["owner"]),
         Visibility = json["visibility"].ToObject <bool>(),
         Profiles = json["profiles"].Select(x => YProfile.FromJson(x)).ToList(),
         Counts = YLikedCounts.FromJson(json["counts"]),
         HasTracks = json["hasTracks"].ToObject <bool>(),
         IsRadioAvailable = json["isRadioAvailable"].ToObject <bool>()
     });
 }
        public static YLibraryPlaylistResponse FromJson(JToken json)
        {
            var playlists = new List <YLibraryPlaylistResponse.YandexLibraryPlaylist>();

            foreach (var x in json["playlists"])
            {
                var playlistOwner = new YOwner
                {
                    Uid      = x["owner"]["uid"].ToObject <string>(),
                    Login    = x["owner"]["login"].ToObject <string>(),
                    Name     = x["owner"]["name"].ToObject <string>(),
                    Sex      = x["owner"]["sex"]?.ToObject <string>(),
                    Verified = x["owner"]["verified"]?.ToObject <bool>()
                };

                var tracks = x.SelectToken("tracks")?.Select(f =>
                                                             new YandexLibraryPlaylist.YandexLibraryPlaylistTrack
                {
                    Id        = f["id"]?.ToObject <long?>(),
                    Timestamp = f["timestamp"]?.ToObject <string>(),
                    AlbumId   = f["albumId"]?.ToObject <long?>()
                }).ToList();

                var libraryCover = YCover.FromJson(x.SelectToken("cover"));

                var playlist = new YandexLibraryPlaylist
                {
                    Owner      = playlistOwner,
                    Available  = x["available"]?.ToObject <bool>(),
                    Uid        = x["uid"]?.ToObject <long>(),
                    Kind       = x["kind"]?.ToObject <long>(),
                    Title      = x["title"]?.ToObject <string>(),
                    Revision   = x["revision"]?.ToObject <long>(),
                    Snapshot   = x["snapshot"]?.ToObject <long>(),
                    TrackCount = x["trackCount"]?.ToObject <long>(),
                    Visibility = x["visibility"]?.ToObject <string>(),
                    Collective = x["collective"]?.ToObject <bool>(),
                    Created    = x["created"]?.ToObject <string>(),
                    Modified   = x["modified"]?.ToObject <string>(),
                    IsBanner   = x["isBanner"]?.ToObject <bool>(),
                    IsPremiere = x["isPremiere"]?.ToObject <bool>(),
                    DurationMs = x["durationMs"]?.ToObject <long>(),
                    Cover      = libraryCover,
                    OgImage    = x["ogImage"]?.ToObject <string>(),
                    Tracks     = tracks,
                    Tags       = x["tags"]?.ToString(),
                    Prerolls   = x["prerolls"]?.ToString(),
                };
                playlists.Add(playlist);
            }

            var libraryOwner = new YOwner
            {
                Uid      = json["owner"]["uid"].ToObject <string>(),
                Login    = json["owner"]["login"].ToObject <string>(),
                Name     = json["owner"]["name"].ToObject <string>(),
                Sex      = string.Empty,
                Verified = null
            };

            var profiles = json["profiles"].Select(x => new YProfile
            {
                Provider  = x["provider"].ToObject <string>(),
                Addresses = x["addresses"].Select(f => f.ToObject <string>()).ToList()
            }).ToList();

            var counts = new YLikedCounts
            {
                LikedArtists = json["counts"]["likedArtists"].ToObject <long>(),
                LikedAlbums  = json["counts"]["likedAlbums"].ToObject <long>(),
            };

            return(new YLibraryPlaylistResponse
            {
                Success = json["success"].ToObject <bool>(),
                BookmarksPlaylistsIds = json["bookmarksPlaylistsIds"].ToString(),
                Bookmarks = json["bookmarks"].ToString(),
                PlaylistIds = json["playlistIds"].Select(x => x.ToObject <long>()).ToList(),
                Playlists = playlists,
                Verified = json["verified"].ToObject <bool>(),
                Owner = libraryOwner,
                Visibility = json["visibility"].ToObject <bool>(),
                Profiles = profiles,
                Counts = counts,
                HasTracks = json["hasTracks"].ToObject <bool>(),
                IsRadioAvailable = json["isRadioAvailable"].ToObject <bool>()
            });
        }