Browse Source

Introduce JsonSerializerOptionsHelper.

pull/6163/head
maliming 6 years ago
parent
commit
a1f1adb196
  1. 21
      framework/src/Volo.Abp.Core/System/Text/Json/JsonSerializerOptionsHelper.cs
  2. 11
      framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpExtraPropertyDictionaryJsonConverter.cs
  3. 5
      framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpStringToBooleanConverter.cs
  4. 12
      framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpStringToEnumConverter.cs
  5. 3
      framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs
  6. 3
      framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs
  7. 17
      modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/JsonSerializerOptionsHelper.cs

21
framework/src/Volo.Abp.Core/System/Text/Json/JsonSerializerOptionsHelper.cs

@ -0,0 +1,21 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
namespace System.Text.Json
{
public static class JsonSerializerOptionsHelper
{
public static JsonSerializerOptions Create(JsonSerializerOptions baseOptions, JsonConverter removeConverter, params JsonConverter[] addConverters)
{
return Create(baseOptions, x => x == removeConverter, addConverters);
}
public static JsonSerializerOptions Create(JsonSerializerOptions baseOptions, Func<JsonConverter, bool> removeConverterPredicate, params JsonConverter[] addConverters)
{
var options = new JsonSerializerOptions(baseOptions);
options.Converters.RemoveAll(removeConverterPredicate);
options.Converters.AddIfNotContains(addConverters);
return options;
}
}
}

11
framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpExtraPropertyDictionaryJsonConverter.cs

@ -13,8 +13,9 @@ namespace Volo.Abp.Json.SystemTextJson.JsonConverters
{
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var newOptions = new JsonSerializerOptions(options);
newOptions.Converters.RemoveAll(x => x == this || x.GetType() == typeof(AbpExtraPropertyDictionaryJsonConverterFactory));
var newOptions = JsonSerializerOptionsHelper.Create(options, x =>
x == this ||
x.GetType() == typeof(AbpExtraPropertyDictionaryJsonConverterFactory));
var rootElement = JsonDocument.ParseValue(ref reader).RootElement;
var extensibleObject = JsonSerializer.Deserialize<T>(rootElement.GetRawText(), newOptions);
@ -31,8 +32,10 @@ namespace Volo.Abp.Json.SystemTextJson.JsonConverters
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
{
var newOptions = new JsonSerializerOptions(options);
newOptions.Converters.RemoveAll(x => x == this || x.GetType() == typeof(AbpExtraPropertyDictionaryJsonConverterFactory));
var newOptions = JsonSerializerOptionsHelper.Create(options, x =>
x == this ||
x.GetType() == typeof(AbpExtraPropertyDictionaryJsonConverterFactory));
JsonSerializer.Serialize(writer, value, newOptions);
}
}

5
framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpStringToBooleanConverter.cs

@ -1,4 +1,4 @@
using System;
using System;
using System.Buffers;
using System.Buffers.Text;
using System.Text.Json;
@ -29,8 +29,7 @@ namespace Volo.Abp.Json.SystemTextJson.JsonConverters
public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options)
{
var newOptions = new JsonSerializerOptions(options);
newOptions.Converters.Remove(this);
var newOptions = JsonSerializerOptionsHelper.Create(options, this);
var entityConverter = (JsonConverter<bool>)newOptions.GetConverter(typeof(bool));
entityConverter.Write(writer, value, newOptions);
}

12
framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/AbpStringToEnumConverter.cs

@ -28,16 +28,20 @@ namespace Volo.Abp.Json.SystemTextJson.JsonConverters
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var newOptions = new JsonSerializerOptions(options);
newOptions.Converters.RemoveAll(x => x == this || x.GetType() == typeof(AbpStringToEnumFactory));
var newOptions = JsonSerializerOptionsHelper.Create(options, x =>
x == this ||
x.GetType() == typeof(AbpStringToEnumFactory));
newOptions.Converters.Add(_innerJsonStringEnumConverter.CreateConverter(typeToConvert, newOptions));
return JsonSerializer.Deserialize<T>(ref reader, newOptions);
}
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
{
var newOptions = new JsonSerializerOptions(options);
newOptions.Converters.RemoveAll(x => x == this || x.GetType() == typeof(AbpStringToEnumFactory));
var newOptions = JsonSerializerOptionsHelper.Create(options, x =>
x == this ||
x.GetType() == typeof(AbpStringToEnumFactory));
JsonSerializer.Serialize(writer, value, newOptions);
}
}

3
framework/src/Volo.Abp.Json/Volo/Abp/Json/SystemTextJson/JsonConverters/ObjectToInferredTypesConverter.cs

@ -51,8 +51,7 @@ namespace Volo.Abp.Json.SystemTextJson.JsonConverters
public override void Write(Utf8JsonWriter writer, object objectToWrite, JsonSerializerOptions options)
{
var newOptions = new JsonSerializerOptions(options);
newOptions.Converters.Remove(this);
var newOptions = JsonSerializerOptionsHelper.Create(options, this);
JsonSerializer.Serialize(writer, objectToWrite, newOptions);
}
}

3
framework/test/Volo.Abp.MemoryDb.Tests/Volo/Abp/MemoryDb/JsonConverters/EntityJsonConverter.cs

@ -25,8 +25,7 @@ namespace Volo.Abp.MemoryDb.JsonConverters
public override void Write(Utf8JsonWriter writer, TEntity value, JsonSerializerOptions options)
{
var newOptions = new JsonSerializerOptions(options);
newOptions.Converters.Remove(this);
var newOptions = JsonSerializerOptionsHelper.Create(options, this);
var entityConverter = (JsonConverter<TEntity>)newOptions.GetConverter(typeof(TEntity));
entityConverter.Write(writer, value, newOptions);
}

17
modules/feature-management/src/Volo.Abp.FeatureManagement.Application.Contracts/Volo/Abp/FeatureManagement/JsonConverters/JsonSerializerOptionsHelper.cs

@ -1,17 +0,0 @@
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Volo.Abp.FeatureManagement.JsonConverters
{
internal static class JsonSerializerOptionsHelper
{
public static JsonSerializerOptions Create(JsonSerializerOptions baseOptions, JsonConverter removeConverter, params JsonConverter[] addConverters)
{
var options = new JsonSerializerOptions(baseOptions);
options.Converters.RemoveAll(x => x == removeConverter);
options.Converters.AddIfNotContains(addConverters);
return options;
}
}
}
Loading…
Cancel
Save