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