Browse Source

Resolve #1503 Reuse Contract Resolver, improve performance.

pull/1505/head
maliming 7 years ago
parent
commit
e27de68142
  1. 11
      framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs
  2. 2
      framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs
  3. 5
      framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs
  4. 5
      framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs
  5. 7
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs
  6. 5
      framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs

11
framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingContractResolver.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection; using System.Reflection;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -35,5 +36,13 @@ namespace Volo.Abp.Auditing
return property; return property;
} }
private static readonly ConcurrentDictionary<List<Type>, AuditingContractResolver> AuditingContractResolverdDictionary = new ConcurrentDictionary<List<Type>, AuditingContractResolver>();
public static AuditingContractResolver GetSharedAuditingContractResolver(List<Type> ignoredTypes)
{
return AuditingContractResolverdDictionary.GetOrAdd(ignoredTypes,
x => new AuditingContractResolver(ignoredTypes));
}
} }
} }

2
framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/JsonNetAuditSerializer.cs

@ -18,7 +18,7 @@ namespace Volo.Abp.Auditing
{ {
var options = new JsonSerializerSettings var options = new JsonSerializerSettings
{ {
ContractResolver = new AuditingContractResolver(Options.IgnoredTypes) ContractResolver = AuditingContractResolver.GetSharedAuditingContractResolver(Options.IgnoredTypes)
}; };
return JsonConvert.SerializeObject(obj, options); return JsonConvert.SerializeObject(obj, options);

5
framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/ApiDescriptionFinder.cs

@ -18,6 +18,9 @@ namespace Volo.Abp.Http.Client.DynamicProxying
protected IApiDescriptionCache Cache { get; } protected IApiDescriptionCache Cache { get; }
private static readonly CamelCasePropertyNamesContractResolver SharedCamelCasePropertyNamesContractResolver =
new CamelCasePropertyNamesContractResolver();
public ApiDescriptionFinder( public ApiDescriptionFinder(
IApiDescriptionCache cache, IApiDescriptionCache cache,
IDynamicProxyHttpClientFactory httpClientFactory) IDynamicProxyHttpClientFactory httpClientFactory)
@ -97,7 +100,7 @@ namespace Volo.Abp.Http.Client.DynamicProxying
typeof(ApplicationApiDescriptionModel), typeof(ApplicationApiDescriptionModel),
new JsonSerializerSettings new JsonSerializerSettings
{ {
ContractResolver = new CamelCasePropertyNamesContractResolver() ContractResolver = SharedCamelCasePropertyNamesContractResolver
}); });
return (ApplicationApiDescriptionModel)result; return (ApplicationApiDescriptionModel)result;

5
framework/src/Volo.Abp.Json/Volo/Abp/Json/Newtonsoft/NewtonsoftJsonSerializer.cs

@ -9,6 +9,9 @@ namespace Volo.Abp.Json.Newtonsoft
{ {
private readonly AbpJsonIsoDateTimeConverter _dateTimeConverter; private readonly AbpJsonIsoDateTimeConverter _dateTimeConverter;
private static readonly CamelCaseExceptDictionaryKeysResolver SharedCamelCaseExceptDictionaryKeysResolver =
new CamelCaseExceptDictionaryKeysResolver();
public NewtonsoftJsonSerializer(AbpJsonIsoDateTimeConverter dateTimeConverter) public NewtonsoftJsonSerializer(AbpJsonIsoDateTimeConverter dateTimeConverter)
{ {
_dateTimeConverter = dateTimeConverter; _dateTimeConverter = dateTimeConverter;
@ -37,7 +40,7 @@ namespace Volo.Abp.Json.Newtonsoft
if (camelCase) if (camelCase)
{ {
settings.ContractResolver = new CamelCaseExceptDictionaryKeysResolver(); settings.ContractResolver = SharedCamelCaseExceptDictionaryKeysResolver;
} }
if (indented) if (indented)

7
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/Json/JsonLocalizationDictionaryBuilder.cs

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using Microsoft.Extensions.Localization; using Microsoft.Extensions.Localization;
@ -9,6 +9,9 @@ namespace Volo.Abp.Localization.Json
{ {
public static class JsonLocalizationDictionaryBuilder public static class JsonLocalizationDictionaryBuilder
{ {
private static readonly CamelCasePropertyNamesContractResolver SharedCamelCasePropertyNamesContractResolver =
new CamelCasePropertyNamesContractResolver();
/// <summary> /// <summary>
/// Builds an <see cref="JsonLocalizationDictionaryBuilder" /> from given file. /// Builds an <see cref="JsonLocalizationDictionaryBuilder" /> from given file.
/// </summary> /// </summary>
@ -38,7 +41,7 @@ namespace Volo.Abp.Localization.Json
jsonString, jsonString,
new JsonSerializerSettings new JsonSerializerSettings
{ {
ContractResolver = new CamelCasePropertyNamesContractResolver() ContractResolver = SharedCamelCasePropertyNamesContractResolver
}); });
} }
catch (JsonException ex) catch (JsonException ex)

5
framework/test/Volo.Abp.AspNetCore.Tests/Volo/Abp/AspNetCore/AbpAspNetCoreTestBase.cs

@ -11,12 +11,15 @@ namespace Volo.Abp.AspNetCore
public abstract class AbpAspNetCoreTestBase<TStartup> : AbpAspNetCoreIntegratedTestBase<TStartup> public abstract class AbpAspNetCoreTestBase<TStartup> : AbpAspNetCoreIntegratedTestBase<TStartup>
where TStartup : class where TStartup : class
{ {
private static readonly CamelCasePropertyNamesContractResolver SharedCamelCasePropertyNamesContractResolver =
new CamelCasePropertyNamesContractResolver();
protected virtual async Task<T> GetResponseAsObjectAsync<T>(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK) protected virtual async Task<T> GetResponseAsObjectAsync<T>(string url, HttpStatusCode expectedStatusCode = HttpStatusCode.OK)
{ {
var strResponse = await GetResponseAsStringAsync(url, expectedStatusCode); var strResponse = await GetResponseAsStringAsync(url, expectedStatusCode);
return JsonConvert.DeserializeObject<T>(strResponse, new JsonSerializerSettings return JsonConvert.DeserializeObject<T>(strResponse, new JsonSerializerSettings
{ {
ContractResolver = new CamelCasePropertyNamesContractResolver() ContractResolver = SharedCamelCasePropertyNamesContractResolver
}); });
} }

Loading…
Cancel
Save