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

如何使用System.Text.Json将枚举序列化为自定义字符串名称

解决System.Text.Json枚举序列化时使用EnumMember自定义值的问题

问题出在JsonStringEnumConverter默认不会读取EnumMember特性的自定义值,需要显式配置让它启用这个功能,以下两种方案任选其一:

方案1:在属性上配置转换器参数

修改SerializationTest类的属性特性,给JsonStringEnumConverter传入UseEnumMemberNames选项:

public sealed class SerializationTest
{
    [JsonPropertyName("type")]
    [JsonConverter(typeof(JsonStringEnumConverter), JsonStringEnumConverterOptions.UseEnumMemberNames)]
    public SerializationType Type { get; set; }
}

这样序列化时就会自动读取EnumMember的Value值,输出预期的system_serialization。

方案2:全局配置序列化选项

如果希望全局生效,在序列化时传入配置好的JsonSerializerOptions:

var myObject = new SerializationTest
{
    Type = SerializationType.System
};

var options = new JsonSerializerOptions
{
    Converters =
    {
        new JsonStringEnumConverter(JsonStringEnumConverterOptions.UseEnumMemberNames)
    }
};

var content = JsonSerializer.Serialize(myObject, options);

执行后会得到{"type":"system_serialization"}的正确结果。

注意事项

  • 该方案适用于.NET 5及以上版本,因为JsonStringEnumConverterOptions是在.NET 5中引入的。
  • 如果使用的是.NET Core 3.x,需要自定义枚举转换器来读取EnumMember特性的值,或者切换到Newtonsoft.Json(后者默认支持EnumMember)。

内容的提问来源于stack exchange,提问作者Lucas Rafaell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:12:37