usingSystem.Diagnostics.CodeAnalysis;
namespaceSystem.Text.Json.Serialization.Converters
{
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("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.")]
internalsealedclassEnumConverterFactory : JsonConverterFactory
{
publicoverrideboolCanConvert(Typetype)
{
returntype.IsEnum;
}
publicoverrideJsonConverterCreateConverter(Typetype, JsonSerializerOptionsoptions)
{
returnCreate(type, EnumConverterOptions.AllowNumbers, null, options);
}
internalstaticJsonConverterCreate(TypeenumType, EnumConverterOptionsconverterOptions, JsonNamingPolicynamingPolicy, JsonSerializerOptionsoptions)
{
return (JsonConverter)Activator.CreateInstance(GetEnumConverterType(enumType), converterOptions, namingPolicy, options);
}
[System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("ReflectionAnalysis", "IL2070:UnrecognizedReflectionPattern", Justification = "'EnumConverter<T> where T : struct' implies 'T : new()', so the trimmer is warning calling MakeGenericType here because enumType's constructors are not annotated. But EnumConverter doesn't call new T(), so this is safe.")]
[return: System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.PublicConstructors)]
privatestaticTypeGetEnumConverterType(TypeenumType)
{
returntypeof(EnumConverter<>).MakeGenericType(enumType);
}
}
}