1+ using System . Text . Json ;
2+ using System . Text . Json . Serialization ;
3+
4+ namespace BlazorPages . Util . Generic ;
5+
6+ /// <summary>
7+ /// Copied from https://gaevoy.com/2023/09/26/dotnet-serialization-unknown-enums-handling-api.html
8+ /// </summary>
9+ /// <typeparam name="T">An <see cref="Enum"/> type</typeparam>
10+ public class UnknownEnumConverter < T > : JsonConverter < T > where T : struct , Enum
11+ {
12+ private readonly JsonConverter < T > _underlying ;
13+
14+ public UnknownEnumConverter ( JsonConverter < T > underlying )
15+ => _underlying = underlying ;
16+
17+ public override T Read ( ref Utf8JsonReader reader , Type enumType , JsonSerializerOptions options )
18+ {
19+ try
20+ {
21+ return _underlying . Read ( ref reader , enumType , options ) ;
22+ }
23+ catch ( JsonException ) when ( enumType . IsEnum )
24+ {
25+ return default ;
26+ }
27+ }
28+
29+ public override bool CanConvert ( Type typeToConvert )
30+ => _underlying . CanConvert ( typeToConvert ) ;
31+
32+ public override void Write ( Utf8JsonWriter writer , T value , JsonSerializerOptions options )
33+ => _underlying . Write ( writer , value , options ) ;
34+
35+ public override T ReadAsPropertyName ( ref Utf8JsonReader reader , Type typeToConvert , JsonSerializerOptions options )
36+ => _underlying . ReadAsPropertyName ( ref reader , typeToConvert , options ) ;
37+
38+ public override void WriteAsPropertyName ( Utf8JsonWriter writer , T value , JsonSerializerOptions options )
39+ => _underlying . WriteAsPropertyName ( writer , value , options ) ;
40+ }
0 commit comments