.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
相关产品推荐
相关产品推荐

