From c1d1b6e9f411c0b2d6d4d2d16e48c8a265111871 Mon Sep 17 00:00:00 2001 From: crobibero Date: Mon, 4 Jan 2021 07:52:44 -0700 Subject: [PATCH] Fix serialization loop --- ... => JsonOmdbNotAvailableInt32Converter.cs} | 21 ++++++++++++------- .../JsonOmdbNotAvailableStringConverter.cs | 2 +- .../Plugins/Omdb/OmdbItemProvider.cs | 2 +- .../Plugins/Omdb/OmdbProvider.cs | 2 +- .../Json/JsonOmdbConverterTests.cs | 2 +- 5 files changed, 17 insertions(+), 12 deletions(-) rename MediaBrowser.Common/Json/Converters/{JsonOmdbNotAvailableStructConverter.cs => JsonOmdbNotAvailableInt32Converter.cs} (54%) diff --git a/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableStructConverter.cs b/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableInt32Converter.cs similarity index 54% rename from MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableStructConverter.cs rename to MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableInt32Converter.cs index 062c497373..cb3d83f584 100644 --- a/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableStructConverter.cs +++ b/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableInt32Converter.cs @@ -8,12 +8,10 @@ namespace MediaBrowser.Common.Json.Converters /// /// Converts a string N/A to string.Empty. /// - /// The resulting type. - public class JsonOmdbNotAvailableStructConverter : JsonConverter - where T : struct + public class JsonOmdbNotAvailableInt32Converter : JsonConverter { /// - public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + public override int? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { if (reader.TokenType == JsonTokenType.String) { @@ -24,16 +22,23 @@ namespace MediaBrowser.Common.Json.Converters } var converter = TypeDescriptor.GetConverter(typeToConvert); - return (T?)converter.ConvertFromString(str); + return (int?)converter.ConvertFromString(str); } - return JsonSerializer.Deserialize(ref reader, options); + return JsonSerializer.Deserialize(ref reader, options); } /// - public override void Write(Utf8JsonWriter writer, T? value, JsonSerializerOptions options) + public override void Write(Utf8JsonWriter writer, int? value, JsonSerializerOptions options) { - JsonSerializer.Serialize(value, options); + if (value.HasValue) + { + writer.WriteNumberValue(value.Value); + } + else + { + writer.WriteNullValue(); + } } } } diff --git a/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableStringConverter.cs b/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableStringConverter.cs index 4fec2ea3fd..6a8790374b 100644 --- a/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableStringConverter.cs +++ b/MediaBrowser.Common/Json/Converters/JsonOmdbNotAvailableStringConverter.cs @@ -29,7 +29,7 @@ namespace MediaBrowser.Common.Json.Converters /// public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) { - JsonSerializer.Serialize(value, options); + writer.WriteStringValue(value); } } } diff --git a/MediaBrowser.Providers/Plugins/Omdb/OmdbItemProvider.cs b/MediaBrowser.Providers/Plugins/Omdb/OmdbItemProvider.cs index 71d5510632..97fcbfb6fe 100644 --- a/MediaBrowser.Providers/Plugins/Omdb/OmdbItemProvider.cs +++ b/MediaBrowser.Providers/Plugins/Omdb/OmdbItemProvider.cs @@ -50,7 +50,7 @@ namespace MediaBrowser.Providers.Plugins.Omdb _jsonOptions = new JsonSerializerOptions(JsonDefaults.GetOptions()); _jsonOptions.Converters.Add(new JsonOmdbNotAvailableStringConverter()); - _jsonOptions.Converters.Add(new JsonOmdbNotAvailableStructConverter()); + _jsonOptions.Converters.Add(new JsonOmdbNotAvailableInt32Converter()); } public string Name => "The Open Movie Database"; diff --git a/MediaBrowser.Providers/Plugins/Omdb/OmdbProvider.cs b/MediaBrowser.Providers/Plugins/Omdb/OmdbProvider.cs index a759f5408c..3da999ad06 100644 --- a/MediaBrowser.Providers/Plugins/Omdb/OmdbProvider.cs +++ b/MediaBrowser.Providers/Plugins/Omdb/OmdbProvider.cs @@ -41,7 +41,7 @@ namespace MediaBrowser.Providers.Plugins.Omdb _jsonOptions = new JsonSerializerOptions(JsonDefaults.GetOptions()); _jsonOptions.Converters.Add(new JsonOmdbNotAvailableStringConverter()); - _jsonOptions.Converters.Add(new JsonOmdbNotAvailableStructConverter()); + _jsonOptions.Converters.Add(new JsonOmdbNotAvailableInt32Converter()); } public async Task Fetch(MetadataResult itemResult, string imdbId, string language, string country, CancellationToken cancellationToken) diff --git a/tests/Jellyfin.Common.Tests/Json/JsonOmdbConverterTests.cs b/tests/Jellyfin.Common.Tests/Json/JsonOmdbConverterTests.cs index 6f85fe0929..03226cf31b 100644 --- a/tests/Jellyfin.Common.Tests/Json/JsonOmdbConverterTests.cs +++ b/tests/Jellyfin.Common.Tests/Json/JsonOmdbConverterTests.cs @@ -14,7 +14,7 @@ namespace Jellyfin.Common.Tests.Json { _options = new JsonSerializerOptions(); _options.Converters.Add(new JsonOmdbNotAvailableStringConverter()); - _options.Converters.Add(new JsonOmdbNotAvailableStructConverter()); + _options.Converters.Add(new JsonOmdbNotAvailableInt32Converter()); _options.NumberHandling = JsonNumberHandling.AllowReadingFromString; }