You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET 8中以AOT友好方式全局序列化枚举为蛇形小写字符串?

全局为枚举应用蛇形小写序列化(AOT友好)

你可以通过自定义枚举转换器+源生成上下文配置的方式实现AOT兼容的全局蛇形小写枚举序列化,步骤如下:

1. 创建预配置蛇形小写的枚举转换器

定义一个继承自JsonStringEnumConverter的转换器,默认绑定JsonNamingPolicy.SnakeCaseLower命名策略:

public class SnakeCaseStringEnumConverter : JsonStringEnumConverter
{
    public SnakeCaseStringEnumConverter() 
        : base(JsonNamingPolicy.SnakeCaseLower)
    {
    }
}

2. 在源生成上下文全局指定该转换器

在你的JsonSerializerContext子类上,通过[JsonSourceGenerationOptions]的EnumConverterType属性,全局设置所有枚举使用这个自定义转换器,同时保持属性的蛇形小写命名策略:

[JsonSourceGenerationOptions(
    DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
    PropertyNamingPolicy = JsonKnownNamingPolicy.SnakeCaseLower,
    EnumConverterType = typeof(SnakeCaseStringEnumConverter)
)]
public partial class MyAppJsonContext : JsonSerializerContext
{
    // 声明需要序列化的目标类型,例如:
    public static readonly MyAppJsonContext Default = new();
}

这样配置后,所有通过该上下文序列化的枚举都会自动转为蛇形小写格式,且完全兼容AOT编译——源生成器会提前为所有涉及的枚举生成对应的序列化代码,无需依赖反射。

补充说明

  • 直接组合UseStringEnumConverter = true和NamingPolicy = JsonKnownNamingPolicy.SnakeCaseLower无法为枚举应用蛇形策略,因为UseStringEnumConverter默认使用的是系统默认命名策略,必须通过EnumConverterType指定带预配置策略的转换器才能生效。
  • 确保所有需要序列化的类型都在JsonSerializerContext中声明,或者通过源生成的其他方式覆盖,保证AOT能正确生成对应代码。

内容的提问来源于stack exchange,提问作者Juan Zamudio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 05:58:21