.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
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.