Start Debugging
2023-09-17 Actualizado 2023-11-05 csharpdotnetdotnet-8 Edit on GitHub

.NET 8 cómo usar JsonStringEnumConverter con native AOT

Aprende a usar el nuevo JsonStringEnumConverter<TEnum> en .NET 8 para una serialización de enums compatible con native AOT en System.Text.Json.

JsonStringEnumConverter no es compatible con native AOT. Para solucionarlo, .NET 8 introduce un nuevo tipo de converter, JsonStringEnumConverter, que sí es compatible con native AOT.

Para usar el nuevo tipo, simplemente anota tus tipos así:

[JsonConverter(typeof(JsonStringEnumConverter<MyEnum>))]
public enum MyEnum { Foo, Bar }

[JsonSerializable(typeof(MyEnum))]
public partial class MyJsonSerializerContext : JsonSerializerContext { }

Ten en cuenta: la deserialización de enums no distingue mayúsculas y minúsculas, mientras que la serialización se puede personalizar con JsonNamingPolicy.

¿Qué pasa si intentas usar JsonStringEnumConverter con NativeAOT?

La primera señal de aviso aparecerá durante la compilación, donde recibirás un warning:

Using member ‘System.Text.Json.Serialization.JsonStringEnumConverter.JsonStringEnumConverter()’ which has ‘RequiresDynamicCodeAttribute’ can break functionality when AOT compiling. JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.

Después, al ejecutar el código compilado, obtendrás una excepción en tiempo de ejecución:

System.Reflection.MissingMetadataException: ‘System.Text.Json.Serialization.Converters.EnumConverter’ is missing metadata.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Volver