From 743c80bc18d4339141400967bfbe91ed93366683 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 23 Jul 2019 17:33:46 +0800 Subject: [PATCH] Reuse shared JsonSerializerSettings instead of shared ContractResolver. --- .../Abp/Auditing/JsonNetAuditSerializer.cs | 24 ++++++-------- .../DynamicProxying/ApiDescriptionFinder.cs | 31 ++++++++++++++----- .../Json/JsonLocalizationDictionaryBuilder.cs | 12 +++---- .../Abp/AspNetCore/AbpAspNetCoreTestBase.cs | 12 +++---- 4 files changed, 44 insertions(+), 35 deletions(-) diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs index 6da7ec5da2..b86df6b6c8 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs @@ -1,5 +1,3 @@ -using System; -using System.Collections.Generic; using Microsoft.Extensions.Options; using Newtonsoft.Json; using Volo.Abp.DependencyInjection; @@ -18,31 +16,29 @@ namespace Volo.Abp.Auditing public string Serialize(object obj) { - var options = new JsonSerializerSettings - { - ContractResolver = GetSharedAuditingContractResolver(Options.IgnoredTypes) - }; - - return JsonConvert.SerializeObject(obj, options); + return JsonConvert.SerializeObject(obj, GetSharedJsonSerializerSettings()); } private static readonly object SyncObj = new object(); - private static AuditingContractResolver _sharedAuditingContractResolver; + private static JsonSerializerSettings _sharedJsonSerializerSettings; - public static AuditingContractResolver GetSharedAuditingContractResolver(List ignoredTypes) + private JsonSerializerSettings GetSharedJsonSerializerSettings() { - if (_sharedAuditingContractResolver == null) + if (_sharedJsonSerializerSettings == null) { lock (SyncObj) { - if (_sharedAuditingContractResolver == null) + if (_sharedJsonSerializerSettings == null) { - _sharedAuditingContractResolver = new AuditingContractResolver(ignoredTypes); + _sharedJsonSerializerSettings = new JsonSerializerSettings + { + ContractResolver = new AuditingContractResolver(Options.IgnoredTypes) + }; } } } - return _sharedAuditingContractResolver; + return _sharedJsonSerializerSettings; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs index 885382b335..d8d0204555 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs @@ -18,9 +18,6 @@ namespace Volo.Abp.Http.Client.DynamicProxying protected IApiDescriptionCache Cache { get; } - private static readonly CamelCasePropertyNamesContractResolver SharedCamelCasePropertyNamesContractResolver = - new CamelCasePropertyNamesContractResolver(); - public ApiDescriptionFinder( IApiDescriptionCache cache, IDynamicProxyHttpClientFactory httpClientFactory) @@ -97,14 +94,32 @@ namespace Volo.Abp.Http.Client.DynamicProxying var result = JsonConvert.DeserializeObject( content, - typeof(ApplicationApiDescriptionModel), - new JsonSerializerSettings - { - ContractResolver = SharedCamelCasePropertyNamesContractResolver - }); + typeof(ApplicationApiDescriptionModel), GetSharedJsonSerializerSettings()); return (ApplicationApiDescriptionModel)result; } } + + private static readonly object SyncObj = new object(); + private static JsonSerializerSettings _sharedJsonSerializerSettings; + + private static JsonSerializerSettings GetSharedJsonSerializerSettings() + { + if (_sharedJsonSerializerSettings == null) + { + lock (SyncObj) + { + if (_sharedJsonSerializerSettings == null) + { + _sharedJsonSerializerSettings = new JsonSerializerSettings + { + ContractResolver = new CamelCasePropertyNamesContractResolver() + }; + } + } + } + + return _sharedJsonSerializerSettings; + } } } diff --git a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs index 78e16480b7..9b1f1617f6 100644 --- a/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs +++ b/framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs @@ -9,8 +9,10 @@ namespace Volo.Abp.Localization.Json { public static class JsonLocalizationDictionaryBuilder { - private static readonly CamelCasePropertyNamesContractResolver SharedCamelCasePropertyNamesContractResolver = - new CamelCasePropertyNamesContractResolver(); + private static readonly JsonSerializerSettings SharedJsonSerializerSettings = new JsonSerializerSettings + { + ContractResolver = new CamelCasePropertyNamesContractResolver() + }; /// /// Builds an from given file. @@ -38,11 +40,7 @@ namespace Volo.Abp.Localization.Json try { jsonFile = JsonConvert.DeserializeObject( - jsonString, - new JsonSerializerSettings - { - ContractResolver = SharedCamelCasePropertyNamesContractResolver - }); + jsonString, SharedJsonSerializerSettings); } catch (JsonException ex) { diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs index 4d0dc01776..33beb9d62c 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs @@ -11,16 +11,16 @@ namespace Volo.Abp.AspNetCore public abstract class AbpAspNetCoreTestBase : AbpAspNetCoreIntegratedTestBase where TStartup : class { - private static readonly CamelCasePropertyNamesContractResolver SharedCamelCasePropertyNamesContractResolver = - new CamelCasePropertyNamesContractResolver(); + private static readonly JsonSerializerSettings SharedJsonSerializerSettings = + new JsonSerializerSettings + { + ContractResolver = new CamelCasePropertyNamesContractResolver() + }; protected virtual async Task GetResponseAsObjectAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) { var strResponse = await GetResponseAsStringAsync(url, expectedStatusCode); - return JsonConvert.DeserializeObject(strResponse, new JsonSerializerSettings - { - ContractResolver = SharedCamelCasePropertyNamesContractResolver - }); + return JsonConvert.DeserializeObject(strResponse, SharedJsonSerializerSettings); } protected virtual async Task GetResponseAsStringAsync(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK)