Last active
June 7, 2023 17:38
-
-
Save pedrovasconcellos/d5d431db67224c6d5e79a0a255ec41d7 to your computer and use it in GitHub Desktop.
InvalidToDefaultEnumConverter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class EnumExtensions | |
{ | |
public static T? GetDefaultValue<T>() where T : Enum | |
{ | |
var enumType = typeof(T); | |
var defaultValueAttribute = Attribute | |
.GetCustomAttribute(enumType, typeof(DefaultValueAttribute)) as DefaultValueAttribute; | |
if (defaultValueAttribute is not null && | |
defaultValueAttribute.Value is T) | |
{ | |
return (T)defaultValueAttribute.Value; | |
} | |
return default; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using System.Text.Json; | |
using System.Text.Json.Serialization; | |
public class InvalidToDefaultEnumConverter<T> : JsonConverter<T> where T : struct, Enum | |
{ | |
public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) | |
{ | |
object valueSelected = reader.TokenType == JsonTokenType.Number | |
? reader.GetInt32() : reader.GetString(); | |
if (Enum.TryParse(typeToConvert, valueSelected.ToString(), true, out object? result)) | |
{ | |
if(result is null) | |
return EnumExtensions.GetDefaultValue<T>(); | |
return (T)result; | |
} | |
return EnumExtensions.GetDefaultValue<T>(); | |
} | |
public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options) | |
{ | |
writer.WriteStringValue(value.ToString()); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
services.AddControllers().AddJsonOptions(options => | |
{ | |
options.JsonSerializerOptions.Converters.Add(new InvalidToDefaultEnumConverter<EnumT>()); | |
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment