Make enums serialize as strings if using the reflection-based serializer. (#473)
* Make enums serialize as strings if using the reflection-based serializer. * Remove unnecessary partial * Use an explicit reflection-based converter for enums. * Update comments * Make the reflection-based enum converter public.
This commit is contained in:
parent
d7d9eab3f8
commit
1e8fb04037
1 changed files with 61 additions and 2 deletions
|
|
@ -1,4 +1,6 @@
|
|||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Text.Json.Serialization.Metadata;
|
||||
|
||||
namespace ModelContextProtocol.Tests;
|
||||
|
||||
|
|
@ -22,4 +24,27 @@ public static class McpJsonUtilitiesTests
|
|||
|
||||
Assert.Equal(JsonSerializer.IsReflectionEnabledByDefault, options.TryGetTypeInfo(anonType, out _));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public static void DefaultOptions_UnknownEnumHandling()
|
||||
{
|
||||
var options = McpJsonUtilities.DefaultOptions;
|
||||
|
||||
if (JsonSerializer.IsReflectionEnabledByDefault)
|
||||
{
|
||||
Assert.Equal("\"A\"", JsonSerializer.Serialize(EnumWithoutAnnotation.A, options));
|
||||
Assert.Equal("\"A\"", JsonSerializer.Serialize(EnumWithAnnotation.A, options));
|
||||
}
|
||||
else
|
||||
{
|
||||
options = new(options) { TypeInfoResolver = new DefaultJsonTypeInfoResolver() };
|
||||
Assert.Equal("1", JsonSerializer.Serialize(EnumWithoutAnnotation.A, options));
|
||||
Assert.Equal("\"A\"", JsonSerializer.Serialize(EnumWithAnnotation.A, options));
|
||||
}
|
||||
}
|
||||
|
||||
public enum EnumWithoutAnnotation { A = 1, B = 2, C = 3 }
|
||||
|
||||
[JsonConverter(typeof(JsonStringEnumConverter<EnumWithAnnotation>))]
|
||||
public enum EnumWithAnnotation { A = 1, B = 2, C = 3 }
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue