public override async Task <ITraktSyncCollectionPostShowSeason> ReadObjectAsync(JsonTextReader jsonReader, CancellationToken cancellationToken = default)
        {
            if (jsonReader == null)
            {
                return(await Task.FromResult(default(ITraktSyncCollectionPostShowSeason)));
            }

            if (await jsonReader.ReadAsync(cancellationToken) && jsonReader.TokenType == JsonToken.StartObject)
            {
                ITraktSyncCollectionPostShowSeason traktSyncCollectionPostShowSeason = new TraktSyncCollectionPostShowSeason();
                var syncCollectionPostShowEpisodeArrayJsonReader = new SyncCollectionPostShowEpisodeArrayJsonReader();

                while (await jsonReader.ReadAsync(cancellationToken) && jsonReader.TokenType == JsonToken.PropertyName)
                {
                    var propertyName = jsonReader.Value.ToString();

                    switch (propertyName)
                    {
                    case JsonProperties.SYNC_COLLECTION_POST_SHOW_SEASON_PROPERTY_NAME_NUMBER:
                    {
                        Pair <bool, int> value = await JsonReaderHelper.ReadIntegerValueAsync(jsonReader, cancellationToken);

                        if (value.First)
                        {
                            traktSyncCollectionPostShowSeason.Number = value.Second;
                        }

                        break;
                    }

                    case JsonProperties.SYNC_COLLECTION_POST_SHOW_SEASON_PROPERTY_NAME_EPISODES:
                        traktSyncCollectionPostShowSeason.Episodes = await syncCollectionPostShowEpisodeArrayJsonReader.ReadArrayAsync(jsonReader, cancellationToken);

                        break;

                    default:
                        await JsonReaderHelper.ReadAndIgnoreInvalidContentAsync(jsonReader, cancellationToken);

                        break;
                    }
                }

                return(traktSyncCollectionPostShowSeason);
            }

            return(await Task.FromResult(default(ITraktSyncCollectionPostShowSeason)));
        }
        private IEnumerable <ITraktSyncCollectionPostShowSeason> CreateSyncCollectionPostShowSeasons(PostSeasons seasons)
        {
            var syncCollectionPostShowSeasons = new List <ITraktSyncCollectionPostShowSeason>();

            foreach (PostSeason season in seasons)
            {
                var syncCollectionPostShowSeason = new TraktSyncCollectionPostShowSeason
                {
                    Number = season.Number
                };

                if (season.Episodes?.Count() > 0)
                {
                    var syncCollectionPostShowEpisodes = new List <ITraktSyncCollectionPostShowEpisode>();

                    foreach (PostEpisode episode in season.Episodes)
                    {
                        syncCollectionPostShowEpisodes.Add(new TraktSyncCollectionPostShowEpisode
                        {
                            Number           = episode.Number,
                            MediaType        = episode.Metadata?.MediaType,
                            MediaResolution  = episode.Metadata?.MediaResolution,
                            Audio            = episode.Metadata?.Audio,
                            AudioChannels    = episode.Metadata?.AudioChannels,
                            ThreeDimensional = episode.Metadata?.ThreeDimensional,
                            HDR         = episode.Metadata?.HDR,
                            CollectedAt = episode.At
                        });
                    }

                    syncCollectionPostShowSeason.Episodes = syncCollectionPostShowEpisodes;
                }

                syncCollectionPostShowSeasons.Add(syncCollectionPostShowSeason);
            }

            return(syncCollectionPostShowSeasons);
        }