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

自定义System.Text.Json JsonConverter未被MVC模型绑定器调用问题

自定义System.Text.Json转换器未被触发的常见原因

  • 当前请求未触发JSON反序列化流程
    你当前使用GET请求,参数拼接在URL的Query String中,ASP.NET Core MVC对于GET请求的复杂类型默认使用查询字符串模型绑定器绑定,该绑定器走的是TypeConverter类型转换体系,完全不会调用System.Text.Json的反序列化逻辑,自然不会触发你写的JsonConverter。
    只有当请求满足以下全部条件时才会走JSON反序列化:

    1. 请求方式为POST/PUT等支持请求体的HTTP方法
    2. 请求头Content-Type设置为application/json
    3. 待绑定的控制器参数标记了[FromBody]特性
    4. 参数内容放在请求体中以JSON格式传输
  • 代码拼写错误导致配置失效
    你提供的代码存在两处拼写错误,可能导致配置不生效:

    1. 自定义转换器继承的官方类名拼写错误:官方基类为JsonConverter(末尾是er不是or),你代码中写的JsonConvertor属于拼写错误,会直接导致继承失效
    2. 视图模型MyViewModel中的属性类型拼写错误:应该是EmployeeTypeEnum,你代码中写为EmployeTypeEnum(少了一个字母e)
  • 全局序列化配置被修改
    如果你在Program.cs/Startup.cs中替换了默认的System.Text.Json序列化器,或者配置了忽略属性级JsonConverter的规则,也会导致转换器不被调用。

  • AJAX配置错误
    你提供的AJAX代码存在配置错误:$.ajax的type参数是指定请求方法,你错误的将其赋值为application/json,正确的配置应该是将contentType参数设置为application/json,如果是POST请求需要将参数放在data字段中序列化为JSON字符串传输。

对应解决方案

如果要继续使用GET请求:放弃JsonConverter的方案,自定义实现TypeConverter或者IModelBinder来处理EmployeeTypeEnum类型的查询参数转换。
如果要使用现有的JsonConverter:

  1. 修正所有拼写错误
  2. 将请求改为POST方式,把参数放在请求体中传输
  3. AJAX配置添加contentType: 'application/json',参数序列化为JSON字符串传入data字段
  4. 控制器方法的MyViewModel参数前添加[FromBody]特性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:54:03