mirror of https://github.com/abpframework/abp.git
4 changed files with 87 additions and 2 deletions
@ -0,0 +1,38 @@ |
|||||
|
using System; |
||||
|
using System.Buffers; |
||||
|
using System.Buffers.Text; |
||||
|
using System.Text.Json; |
||||
|
using System.Text.Json.Serialization; |
||||
|
|
||||
|
namespace Volo.Abp.Json.SystemTextJson.JsonConverters |
||||
|
{ |
||||
|
public class AbpStringToBooleanConverter : JsonConverter<bool> |
||||
|
{ |
||||
|
public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) |
||||
|
{ |
||||
|
if (reader.TokenType == JsonTokenType.String) |
||||
|
{ |
||||
|
var span = reader.HasValueSequence ? reader.ValueSequence.ToArray() : reader.ValueSpan; |
||||
|
if (Utf8Parser.TryParse(span, out bool b1, out var bytesConsumed) && span.Length == bytesConsumed) |
||||
|
{ |
||||
|
return b1; |
||||
|
} |
||||
|
|
||||
|
if (bool.TryParse(reader.GetString(), out var b2)) |
||||
|
{ |
||||
|
return b2; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return reader.GetBoolean(); |
||||
|
} |
||||
|
|
||||
|
public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options) |
||||
|
{ |
||||
|
var newOptions = new JsonSerializerOptions(options); |
||||
|
newOptions.Converters.Remove(this); |
||||
|
var entityConverter = (JsonConverter<bool>)newOptions.GetConverter(typeof(bool)); |
||||
|
entityConverter.Write(writer, value, newOptions); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,41 @@ |
|||||
|
using System; |
||||
|
using System.Text.Json; |
||||
|
using System.Text.Json.Serialization; |
||||
|
|
||||
|
namespace Volo.Abp.Json.SystemTextJson.JsonConverters |
||||
|
{ |
||||
|
public class AbpStringToEnumConverter : JsonConverter<object> |
||||
|
{ |
||||
|
private readonly JsonStringEnumConverter _innerJsonStringEnumConverter; |
||||
|
|
||||
|
public AbpStringToEnumConverter() |
||||
|
: this(namingPolicy: null, allowIntegerValues: true) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public AbpStringToEnumConverter(JsonNamingPolicy namingPolicy = null, bool allowIntegerValues = true) |
||||
|
{ |
||||
|
_innerJsonStringEnumConverter = new JsonStringEnumConverter(namingPolicy, allowIntegerValues); |
||||
|
} |
||||
|
|
||||
|
public override bool CanConvert(Type typeToConvert) |
||||
|
{ |
||||
|
return typeToConvert.IsEnum; |
||||
|
} |
||||
|
|
||||
|
public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) |
||||
|
{ |
||||
|
var newOptions = new JsonSerializerOptions(options); |
||||
|
newOptions.Converters.Remove(this); |
||||
|
newOptions.Converters.Add(_innerJsonStringEnumConverter.CreateConverter(typeToConvert, options)); |
||||
|
return JsonSerializer.Deserialize(ref reader, typeToConvert, newOptions); |
||||
|
} |
||||
|
|
||||
|
public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options) |
||||
|
{ |
||||
|
var newOptions = new JsonSerializerOptions(options); |
||||
|
newOptions.Converters.Remove(this); |
||||
|
JsonSerializer.Serialize(writer, value, newOptions); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue