Skip to content

Commit bbbf86f

Browse files
committed
Guard tolerant enum converter creation
1 parent cd511b1 commit bbbf86f

2 files changed

Lines changed: 29 additions & 1 deletion

File tree

src/Geocoding.Core/Serialization/TolerantStringEnumConverter.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@ public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializer
2323
var converterType = nullableEnumType is null
2424
? typeof(TolerantStringEnumConverter<>).MakeGenericType(typeToConvert)
2525
: typeof(NullableTolerantStringEnumConverter<>).MakeGenericType(nullableEnumType);
26-
return (JsonConverter)Activator.CreateInstance(converterType);
26+
27+
var converter = Activator.CreateInstance(converterType);
28+
if (converter is not JsonConverter jsonConverter)
29+
throw new InvalidOperationException($"Unable to create converter '{converterType}' for enum type '{typeToConvert}'.");
30+
31+
return jsonConverter;
2732
}
2833
}
2934

test/Geocoding.Tests/Serialization/TolerantStringEnumConverterTest.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,33 @@
11
using Geocoding.Extensions;
2+
using System.Text.Json.Serialization;
23
using Xunit;
34

45
namespace Geocoding.Tests.Serialization;
56

67
public class TolerantStringEnumConverterTest
78
{
9+
[Fact]
10+
public void CreateConverter_ForEnumType_ReturnsTypedConverter()
11+
{
12+
// Act
13+
var converter = JsonExtensions.JsonOptions.GetConverter(typeof(EnumWithUnknown));
14+
15+
// Assert
16+
Assert.NotNull(converter);
17+
Assert.IsAssignableFrom<JsonConverter<EnumWithUnknown>>(converter);
18+
}
19+
20+
[Fact]
21+
public void CreateConverter_ForNullableEnumType_ReturnsTypedConverter()
22+
{
23+
// Act
24+
var converter = JsonExtensions.JsonOptions.GetConverter(typeof(EnumWithUnknown?));
25+
26+
// Assert
27+
Assert.NotNull(converter);
28+
Assert.IsAssignableFrom<JsonConverter<EnumWithUnknown?>>(converter);
29+
}
30+
831
[Fact]
932
public void FromJson_UnknownStringForEnumWithUnknownMember_ReturnsUnknown()
1033
{

0 commit comments

Comments
 (0)