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

C# WebApi中如何将字符串数组绑定到DTO类的枚举类型List集合

解决方法

ASP.NET Core默认的JSON序列化器仅支持枚举值的数值绑定,要支持字符串名称绑定,根据你使用的序列化器选择对应配置即可:

场景1:使用默认System.Text.Json序列化器(ASP.NET Core 3.0+默认)

方案1:全局配置所有枚举都支持字符串绑定

在项目的Program.cs文件中修改控制器服务注册逻辑,添加枚举字符串转换器:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 新增枚举字符串转换器,第二个参数设为true可忽略字符串大小写
        options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter(allowIntegerValues: true));
    });

allowIntegerValues设为true时,数值和字符串格式的枚举值都可以被正常绑定,不需要完全切到字符串格式。

方案2:仅针对指定属性配置

如果不需要全局生效,可直接在DTO的枚举属性上添加转换器特性:

public record MessageDto {
    [Required] 
    public string Content { get; init; }

    [JsonConverter(typeof(JsonStringEnumConverter))]
    public List<MessageType> Types { get; init;}
}

场景2:使用Newtonsoft.Json序列化器

如果你是老项目或者显式接入了Newtonsoft.Json,使用对应的转换器即可:

全局配置

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
    });

单独属性配置

public record MessageDto {
    [Required] 
    public string Content { get; init; }

    [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.StringEnumConverter))]
    public List<MessageType> Types { get; init;}
}

配置完成后,"Sms"、"sms"(如果开启忽略大小写)、0三种格式都可以正常绑定到枚举列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 01:21:04