diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo/Abp/AspNetCore/Mvc/NewtonsoftJson/AbpAspNetCoreMvcNewtonsoftModule.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo/Abp/AspNetCore/Mvc/NewtonsoftJson/AbpAspNetCoreMvcNewtonsoftModule.cs index 6e71fe7b5f..4ee0f6c831 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo/Abp/AspNetCore/Mvc/NewtonsoftJson/AbpAspNetCoreMvcNewtonsoftModule.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.NewtonsoftJson/Volo/Abp/AspNetCore/Mvc/NewtonsoftJson/AbpAspNetCoreMvcNewtonsoftModule.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc; +using System; +using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Json.Newtonsoft; using Volo.Abp.Modularity; @@ -13,9 +14,9 @@ public class AbpAspNetCoreMvcNewtonsoftModule : AbpModule context.Services.AddMvcCore().AddNewtonsoftJson(); context.Services.AddOptions() - .Configure((options, contractResolver) => + .Configure((options, serviceProvider) => { - options.SerializerSettings.ContractResolver = contractResolver; + options.SerializerSettings.ContractResolver = new AbpCamelCasePropertyNamesContractResolver(serviceProvider.GetRequiredService()); }); } } diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpCamelCasePropertyNamesContractResolver.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpCamelCasePropertyNamesContractResolver.cs index 3e4e5d0121..aabb1e6b10 100644 --- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpCamelCasePropertyNamesContractResolver.cs +++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpCamelCasePropertyNamesContractResolver.cs @@ -1,22 +1,16 @@ -using System; -using System.Reflection; -using Microsoft.Extensions.DependencyInjection; +using System.Reflection; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; -using Volo.Abp.DependencyInjection; namespace Volo.Abp.Json.Newtonsoft; -public class AbpCamelCasePropertyNamesContractResolver : CamelCasePropertyNamesContractResolver, ITransientDependency +public class AbpCamelCasePropertyNamesContractResolver : CamelCasePropertyNamesContractResolver { - private readonly Lazy _dateTimeConverter; + private readonly AbpDateTimeConverter _dateTimeConverter; - public AbpCamelCasePropertyNamesContractResolver(IServiceProvider serviceProvider) + public AbpCamelCasePropertyNamesContractResolver(AbpDateTimeConverter dateTimeConverter) { - _dateTimeConverter = new Lazy( - serviceProvider.GetRequiredService, - true - ); + _dateTimeConverter = dateTimeConverter; NamingStrategy = new CamelCaseNamingStrategy { @@ -30,7 +24,7 @@ public class AbpCamelCasePropertyNamesContractResolver : CamelCasePropertyNamesC if (AbpDateTimeConverter.ShouldNormalize(member, property)) { - property.Converter = _dateTimeConverter.Value; + property.Converter = _dateTimeConverter; } return property; diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpDefaultContractResolver.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpDefaultContractResolver.cs index 131e95d4c2..527a7282e6 100644 --- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpDefaultContractResolver.cs +++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpDefaultContractResolver.cs @@ -1,6 +1,4 @@ -using System; using System.Reflection; -using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; using Volo.Abp.DependencyInjection; @@ -9,14 +7,11 @@ namespace Volo.Abp.Json.Newtonsoft; public class AbpDefaultContractResolver : DefaultContractResolver, ITransientDependency { - private readonly Lazy _dateTimeConverter; + private readonly AbpDateTimeConverter _dateTimeConverter; - public AbpDefaultContractResolver(IServiceProvider serviceProvider) + public AbpDefaultContractResolver(AbpDateTimeConverter dateTimeConverter) { - _dateTimeConverter = new Lazy( - serviceProvider.GetRequiredService, - true - ); + _dateTimeConverter = dateTimeConverter; } protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) @@ -25,7 +20,7 @@ public class AbpDefaultContractResolver : DefaultContractResolver, ITransientDep if (AbpDateTimeConverter.ShouldNormalize(member, property)) { - property.Converter = _dateTimeConverter.Value; + property.Converter = _dateTimeConverter; } return property; diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpJsonNewtonsoftModule.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpJsonNewtonsoftModule.cs index c1f1f3a0cf..02e049ea09 100644 --- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpJsonNewtonsoftModule.cs +++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpJsonNewtonsoftModule.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.DependencyInjection; +using System; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Modularity; using Volo.Abp.Timing; @@ -10,9 +11,9 @@ public class AbpJsonNewtonsoftModule : AbpModule public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddOptions() - .Configure((options, contractResolver) => + .Configure((options, serviceProvider) => { - options.JsonSerializerSettings.ContractResolver = contractResolver; + options.JsonSerializerSettings.ContractResolver = new AbpCamelCasePropertyNamesContractResolver(serviceProvider.GetRequiredService()); }); } } diff --git a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializer.cs b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializer.cs index 36ba95e74c..891a2210fc 100644 --- a/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializer.cs +++ b/framework/src/Volo.Abp.Json.Newtonsoft/Volo/Abp/Json/Newtonsoft/AbpNewtonsoftJsonSerializer.cs @@ -34,7 +34,7 @@ public class AbpNewtonsoftJsonSerializer : IJsonSerializer, ITransientDependency return JsonConvert.DeserializeObject(jsonString, type, CreateJsonSerializerOptions(camelCase)); } - private static readonly ConcurrentDictionary JsonSerializerOptionsCache = + private readonly static ConcurrentDictionary JsonSerializerOptionsCache = new ConcurrentDictionary(); protected virtual JsonSerializerSettings CreateJsonSerializerOptions(bool camelCase = true, bool indented = false) @@ -81,9 +81,11 @@ public class AbpNewtonsoftJsonSerializer : IJsonSerializer, ITransientDependency TypeNameAssemblyFormatHandling = Options.Value.JsonSerializerSettings.TypeNameAssemblyFormatHandling }; - settings.ContractResolver = camelCase - ? ServiceProvider.GetRequiredService() - : ServiceProvider.GetRequiredService(); + if (!camelCase) + { + // Default contract resolver is AbpCamelCasePropertyNamesContractResolver} + settings.ContractResolver = new AbpDefaultContractResolver(ServiceProvider.GetRequiredService()); + } if (indented) { diff --git a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpDefaultJsonTypeInfoResolver.cs b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpDefaultJsonTypeInfoResolver.cs index 385544dc0b..c49b37964f 100644 --- a/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpDefaultJsonTypeInfoResolver.cs +++ b/framework/src/Volo.Abp.Json.SystemTextJson/Volo/Abp/Json/SystemTextJson/AbpDefaultJsonTypeInfoResolver.cs @@ -1,10 +1,9 @@ using System.Text.Json.Serialization.Metadata; using Microsoft.Extensions.Options; -using Volo.Abp.DependencyInjection; namespace Volo.Abp.Json.SystemTextJson; -public class AbpDefaultJsonTypeInfoResolver : DefaultJsonTypeInfoResolver, ITransientDependency +public class AbpDefaultJsonTypeInfoResolver : DefaultJsonTypeInfoResolver { public AbpDefaultJsonTypeInfoResolver(IOptions options) {