Browse Source

Add UseHybridSerializer to AbpJsonOptions.

pull/6111/head
maliming 6 years ago
parent
commit
fc0bbc47ed
  1. 9
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Json/MvcCoreBuilderExtensions.cs
  2. 7
      framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs
  3. 9
      framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonOptions.cs

9
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<AbpJsonOptions>();
if (!abpJsonOptions.UseHybridSerializer)
{
builder.Services.TryAddEnumerable(ServiceDescriptor.Transient<IConfigureOptions<MvcNewtonsoftJsonOptions>, AbpMvcNewtonsoftJsonOptionsSetup>());
builder.AddNewtonsoftJson();
return builder;
}
//SystemTextJsonInputFormatter
builder.Services.AddTransient(provider =>
{

7
framework/src/Volo.Abp.Json/Volo/Abp/Json/AbpJsonModule.cs

@ -19,7 +19,12 @@ namespace Volo.Abp.Json
Configure<AbpJsonOptions>(options =>
{
options.Providers.Add<AbpNewtonsoftJsonSerializerProvider>();
options.Providers.Add<AbpSystemTextJsonSerializerProvider>();
var abpJsonOptions = context.Services.ExecutePreConfiguredActions<AbpJsonOptions>();
if (abpJsonOptions.UseHybridSerializer)
{
options.Providers.Add<AbpSystemTextJsonSerializerProvider>();
}
});
Configure<AbpNewtonsoftJsonSerializerOptions>(options =>

9
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
/// </summary>
public string DefaultDateTimeFormat { get; set; }
/// <summary>
/// It will try to use System.Json.Text to handle JSON if it can otherwise use Newtonsoft.
/// Affects both AbpJsonModule and AbpAspNetCoreMvcModule.
/// See <see cref="AbpSystemTextJsonUnsupportedTypeMatcher"/>
/// </summary>
public bool UseHybridSerializer { get; set; }
public ITypeList<IJsonSerializerProvider> Providers { get; }
public AbpJsonOptions()
{
Providers = new TypeList<IJsonSerializerProvider>();
UseHybridSerializer = true;
}
}
}

Loading…
Cancel
Save