Newtonsoft.Json是否内置枚举值蛇形命名序列化功能?
好问题!Newtonsoft.Json(也就是大家常说的Json.NET)确实**内置了将枚举值序列化为蛇形命名(snake_case)**的功能,完全不用像你现在这样手动给每个枚举成员加EnumMember特性(当然你的手动实现方式本身是没问题的,只是有更省心的内置方案)。
具体实现方式
1. 单独枚举配置(局部生效)
从Newtonsoft.Json 12.0.1版本开始,StringEnumConverter新增了支持命名策略的重载构造函数。如果你只想给某个特定枚举启用蛇形命名,直接在枚举上标记特性即可,无需手动指定每个成员的EnumMember值:
[JsonConverter(typeof(StringEnumConverter), typeof(SnakeCaseNamingStrategy))] enum MyEnum { ValueOne, ValueTwo, AnotherValue }
这样序列化后,ValueOne会自动转为"value_one",AnotherValue转为"another_value",完全遵循蛇形命名规则。
2. 全局配置(项目范围生效,推荐)
如果希望整个项目里的所有枚举都默认使用蛇形命名序列化,可以在JsonSerializerSettings中全局配置,一劳永逸:
var jsonSettings = new JsonSerializerSettings { Converters = new List<JsonConverter> { new StringEnumConverter(new SnakeCaseNamingStrategy()) } }; // 序列化示例 var serializedJson = JsonConvert.SerializeObject(MyEnum.ValueOne, jsonSettings); // 输出结果:"value_one"
两种方案的适用场景
- 你当前的手动
EnumMember方式:适合需要自定义非标准命名的场景(比如某个枚举成员不想遵循蛇形规则,需要特殊命名); - 内置命名策略方式:适合批量统一处理,减少重复代码,后续新增枚举成员也无需额外配置,维护成本更低。
内容的提问来源于stack exchange,提问作者Poulad
相关产品推荐
相关产品推荐

