@@ -10,6 +10,7 @@ public class JsonStringEnumMemberConverter : JsonConverterFactory
1010 {
1111 private readonly JsonNamingPolicy ? _NamingPolicy ;
1212 private readonly bool _AllowIntegerValues ;
13+ private readonly ulong ? _DeserializationFailureFallbackValue ;
1314
1415 /// <summary>
1516 /// Initializes a new instance of the <see cref="JsonStringEnumMemberConverter"/> class.
@@ -29,10 +30,16 @@ public JsonStringEnumMemberConverter()
2930 /// True to allow undefined enum values. When true, if an enum value isn't
3031 /// defined it will output as a number rather than a string.
3132 /// </param>
32- public JsonStringEnumMemberConverter ( JsonNamingPolicy ? namingPolicy = null , bool allowIntegerValues = true )
33+ /// <param name="deserializationFailureFallbackValue">
34+ /// Optional default value to use when a json string does not match
35+ /// anything defined on the target enum. If not specified a <see
36+ /// cref="JsonException"/> is thrown for all failures.
37+ /// </param>
38+ public JsonStringEnumMemberConverter ( JsonNamingPolicy ? namingPolicy = null , bool allowIntegerValues = true , ulong ? deserializationFailureFallbackValue = null )
3339 {
3440 _NamingPolicy = namingPolicy ;
3541 _AllowIntegerValues = allowIntegerValues ;
42+ _DeserializationFailureFallbackValue = deserializationFailureFallbackValue ;
3643 }
3744
3845 /// <inheritdoc/>
@@ -55,13 +62,13 @@ public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializer
5562 typeof ( NullableEnumMemberConverter < > ) . MakeGenericType ( UnderlyingType ) ,
5663 BindingFlags . Instance | BindingFlags . Public ,
5764 binder : null ,
58- args : new object ? [ ] { _NamingPolicy , _AllowIntegerValues } ,
65+ args : new object ? [ ] { _NamingPolicy , _AllowIntegerValues , _DeserializationFailureFallbackValue } ,
5966 culture : null )
6067 : ( JsonConverter ) Activator . CreateInstance (
6168 typeof ( EnumMemberConverter < > ) . MakeGenericType ( typeToConvert ) ,
6269 BindingFlags . Instance | BindingFlags . Public ,
6370 binder : null ,
64- args : new object ? [ ] { _NamingPolicy , _AllowIntegerValues } ,
71+ args : new object ? [ ] { _NamingPolicy , _AllowIntegerValues , _DeserializationFailureFallbackValue } ,
6572 culture : null ) ;
6673 }
6774
@@ -79,9 +86,9 @@ private class EnumMemberConverter<TEnum> : JsonConverter<TEnum>
7986 {
8087 private readonly JsonStringEnumMemberConverterHelper < TEnum > _JsonStringEnumMemberConverterHelper ;
8188
82- public EnumMemberConverter ( JsonNamingPolicy ? namingPolicy , bool allowIntegerValues )
89+ public EnumMemberConverter ( JsonNamingPolicy ? namingPolicy , bool allowIntegerValues , ulong ? deserializationFailureFallbackValue )
8390 {
84- _JsonStringEnumMemberConverterHelper = new JsonStringEnumMemberConverterHelper < TEnum > ( namingPolicy , allowIntegerValues ) ;
91+ _JsonStringEnumMemberConverterHelper = new JsonStringEnumMemberConverterHelper < TEnum > ( namingPolicy , allowIntegerValues , deserializationFailureFallbackValue ) ;
8592 }
8693
8794 public override TEnum Read ( ref Utf8JsonReader reader , Type typeToConvert , JsonSerializerOptions options )
@@ -98,9 +105,9 @@ private class NullableEnumMemberConverter<TEnum> : JsonConverter<TEnum?>
98105 {
99106 private readonly JsonStringEnumMemberConverterHelper < TEnum > _JsonStringEnumMemberConverterHelper ;
100107
101- public NullableEnumMemberConverter ( JsonNamingPolicy ? namingPolicy , bool allowIntegerValues )
108+ public NullableEnumMemberConverter ( JsonNamingPolicy ? namingPolicy , bool allowIntegerValues , ulong ? deserializationFailureFallbackValue )
102109 {
103- _JsonStringEnumMemberConverterHelper = new JsonStringEnumMemberConverterHelper < TEnum > ( namingPolicy , allowIntegerValues ) ;
110+ _JsonStringEnumMemberConverterHelper = new JsonStringEnumMemberConverterHelper < TEnum > ( namingPolicy , allowIntegerValues , deserializationFailureFallbackValue ) ;
104111 }
105112
106113 public override TEnum ? Read ( ref Utf8JsonReader reader , Type typeToConvert , JsonSerializerOptions options )
0 commit comments