From fc0bbc47ed3d0c9c5c2bbd20707a4c7bb39de018 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 8 Nov 2020 20:52:33 +0800 Subject: [PATCH] Add UseHybridSerializer to AbpJsonOptions. --- .../Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs | 9 +++++++++ .../src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs | 7 ++++++- .../src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs | 9 +++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs index 9ff3ac21b0..b4e19e6ae7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs @@ -8,6 +8,7 @@ using Microsoft.Extensions.Options; using System.Text.Encodings.Web; using Microsoft.Extensions.Logging; using Microsoft.Extensions.ObjectPool; +using Volo.Abp.Json; namespace Volo.Abp.AspNetCore.Mvc.Json { @@ -15,6 +16,14 @@ namespace Volo.Abp.AspNetCore.Mvc.Json { public static IMvcCoreBuilder AddAbpHybridJson(this IMvcCoreBuilder builder) { + var abpJsonOptions = builder.Services.ExecutePreConfiguredActions(); + if (!abpJsonOptions.UseHybridSerializer) + { + builder.Services.TryAddEnumerable(ServiceDescriptor.Transient, AbpMvcNewtonsoftJsonOptionsSetup>()); + builder.AddNewtonsoftJson(); + return builder; + } + //SystemTextJsonInputFormatter builder.Services.AddTransient(provider => { diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs index fae54ec08b..a4a08ce274 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs @@ -19,7 +19,12 @@ namespace Volo.Abp.Json Configure(options => { options.Providers.Add(); - options.Providers.Add(); + + var abpJsonOptions = context.Services.ExecutePreConfiguredActions(); + if (abpJsonOptions.UseHybridSerializer) + { + options.Providers.Add(); + } }); Configure(options => diff --git a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs index 55a4683e26..04c100e546 100644 --- a/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs +++ b/framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs @@ -1,4 +1,5 @@ using Volo.Abp.Collections; +using Volo.Abp.Json.SystemTextJson; namespace Volo.Abp.Json { @@ -9,11 +10,19 @@ namespace Volo.Abp.Json /// public string DefaultDateTimeFormat { get; set; } + /// + /// It will try to use System.Json.Text to handle JSON if it can otherwise use Newtonsoft. + /// Affects both AbpJsonModule and AbpAspNetCoreMvcModule. + /// See + /// + public bool UseHybridSerializer { get; set; } + public ITypeList Providers { get; } public AbpJsonOptions() { Providers = new TypeList(); + UseHybridSerializer = true; } } }