From 2a4b3d79b854a394f1a31babf6b9f8061bdd9965 Mon Sep 17 00:00:00 2001 From: ta264 Date: Thu, 6 Aug 2020 21:58:59 +0100 Subject: [PATCH] Fixed: Shared serializer in ProviderRepository [common] Some caching happens in the serializer settings so best not to recreate each time --- .../ThingiProvider/ProviderRepository.cs | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/ThingiProvider/ProviderRepository.cs b/src/NzbDrone.Core/ThingiProvider/ProviderRepository.cs index d312b83c6..b558daad5 100644 --- a/src/NzbDrone.Core/ThingiProvider/ProviderRepository.cs +++ b/src/NzbDrone.Core/ThingiProvider/ProviderRepository.cs @@ -1,9 +1,11 @@ using System.Collections.Generic; using System.Text.Json; +using System.Text.Json.Serialization; using Dapper; using NzbDrone.Common.Extensions; using NzbDrone.Common.Reflection; using NzbDrone.Core.Datastore; +using NzbDrone.Core.Datastore.Converters; using NzbDrone.Core.Messaging.Events; namespace NzbDrone.Core.ThingiProvider @@ -12,9 +14,26 @@ namespace NzbDrone.Core.ThingiProvider where TProviderDefinition : ProviderDefinition, new() { + protected readonly JsonSerializerOptions _serializerSettings; + protected ProviderRepository(IMainDatabase database, IEventAggregator eventAggregator) : base(database, eventAggregator) { + var serializerSettings = new JsonSerializerOptions + { + AllowTrailingCommas = true, + IgnoreNullValues = true, + PropertyNameCaseInsensitive = true, + DictionaryKeyPolicy = JsonNamingPolicy.CamelCase, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + WriteIndented = true + }; + + serializerSettings.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase, true)); + serializerSettings.Converters.Add(new TimeSpanConverter()); + serializerSettings.Converters.Add(new UtcConverter()); + + _serializerSettings = serializerSettings; } protected override List Query(SqlBuilder builder) @@ -29,7 +48,6 @@ namespace NzbDrone.Core.ThingiProvider { var parser = reader.GetRowParser(typeof(TProviderDefinition)); var settingsIndex = reader.GetOrdinal(nameof(ProviderDefinition.Settings)); - var serializerSettings = new JsonSerializerOptions { PropertyNameCaseInsensitive = true }; while (reader.Read()) { @@ -43,7 +61,7 @@ namespace NzbDrone.Core.ThingiProvider } else { - item.Settings = (IProviderConfig)JsonSerializer.Deserialize(body, impType, serializerSettings); + item.Settings = (IProviderConfig)JsonSerializer.Deserialize(body, impType, _serializerSettings); } results.Add(item);