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

.NET 6中如何默认将简单Enum序列化为整数而非字符串

解决Refit中枚举序列化为数字的问题

问题根源在于你配置的JsonStringEnumMemberConverter默认会将枚举序列化为成员名称(或[EnumMember]指定的字符串),导致GenderType被序列化为Male/Female/Other而非对应的数字值。以下是几种可行的解决方案:

方案1:全局配置枚举为数字序列化(保留转换器)

修改Refit的Json序列化配置,给JsonStringEnumMemberConverter传入Numeric选项,让所有枚举都序列化为数字:

var refitSettings = new RefitSettings(
    new SystemTextJsonContentSerializer(
        new JsonSerializerOptions()
        {
            PropertyNameCaseInsensitive = true,
            PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
            Converters = {
                // 指定枚举以数字形式序列化
                new JsonStringEnumMemberConverter(JsonStringEnumMemberConverterOptions.Numeric),
                new ObjectToInferredTypesConverter()
            }
        })
);

方案2:移除字符串枚举转换器(依赖默认行为)

如果不需要通过[EnumMember]自定义枚举的字符串序列化,直接移除JsonStringEnumMemberConverter即可。System.Text.Json默认会将枚举序列化为对应的数字值:

var refitSettings = new RefitSettings(
    new SystemTextJsonContentSerializer(
        new JsonSerializerOptions()
        {
            PropertyNameCaseInsensitive = true,
            PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
            Converters = {
                new ObjectToInferredTypesConverter()
            }
        })
);

方案3:仅针对单个枚举配置数字序列化

如果只想让GenderType序列化为数字,不影响其他枚举的字符串序列化行为,可以给枚举添加[JsonConverter]特性:

using System.Text.Json.Serialization;

[JsonConverter(typeof(JsonStringEnumMemberConverter), JsonStringEnumMemberConverterOptions.Numeric)]
public enum GenderType
{
    Male = 1,
    Female = 2,
    Other = 3
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:32:33