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

WebAPI数据绑定忽略自定义EnumConverter的解决方法咨询

问题根因

你自定义的MyEnumConverter不生效的核心原因:

  • EnumConverter是基于TypeDescriptor的传统模型绑定组件,仅在处理查询字符串、表单等非JSON格式入参时才会被调用。
  • ASP.NET Core 3.0+ 默认使用 System.Text.Json 处理[FromBody]标记的JSON请求反序列化,这套流程不会识别枚举上标记的TypeConverterAttribute,因此你在ConvertFrom()方法设置的断点永远不会命中,直接抛出JSON转换失败的错误。
可选解决方案

二选一即可:

方案1:编写System.Text.Json专属自定义转换器(推荐,无额外依赖)

实现JsonConverter<T>适配你现有的枚举解析逻辑:

using System.Text.Json;
using System.Text.Json.Serialization;

public class MyEventTypeJsonConverter : JsonConverter<MyEventType>
{
    public override MyEventType Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        var enumStr = reader.GetString();
        // 复用你已有的枚举描述解析逻辑
        return (MyEventType)EnumExtensions.GetValueFromDescription(enumStr, typeof(MyEventType));
    }

    public override void Write(Utf8JsonWriter writer, MyEventType value, JsonSerializerOptions options)
    {
        // 序列化逻辑可按需调整,示例直接输出枚举名称字符串
        writer.WriteStringValue(value.ToString());
    }
}

全局注册转换器,所有接口的该枚举类型都会按自定义逻辑解析,在Program.cs中添加配置:

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
    .AddJsonOptions(opt =>
    {
        opt.JsonSerializerOptions.Converters.Add(new MyEventTypeJsonConverter());
    });

如果只需要给单个属性生效,不需要全局注册,直接在对应属性上标记特性即可:

public class MyEvent 
{
   [JsonConverter(typeof(MyEventTypeJsonConverter))]
   public MyEventType eventType {get; set;}
}

方案2:切换为Newtonsoft.Json序列化器,兼容原有TypeConverter逻辑

如果不想重写转换器,直接复用现有MyEnumConverter的逻辑,可以把默认JSON序列化器替换为Newtonsoft.Json(Json.NET),它原生支持识别类型上标记的TypeConverter特性:

  1. 安装对应版本的NuGet包Microsoft.AspNetCore.Mvc.NewtonsoftJson
  2. 在Program.cs中配置替换默认序列化器:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers()
    .AddNewtonsoftJson();

配置完成后,原有MyEnumConverter的逻辑会在JSON反序列化时自动触发,不需要修改其他代码。

补充:ASP.NET Core 3.0之前的版本默认使用Newtonsoft.Json作为JSON序列化器,不会出现该问题,这个兼容问题是3.0版本切换默认序列化器引入的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:18:40