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

.NET Core 3.1 POST请求中JsonProperty标记属性模型绑定失效问题

问题产生原因

这个问题本质是模型绑定流程没有按预期走Newtonsoft.Json的反序列化逻辑,常见触发原因有以下几类:

  • 绑定源未正确指定,未走JSON反序列化流程
    .NET Core 3.1的MVC模型绑定会根据规则选择值来源:只有给参数显式标记[FromBody],或者控制器加了[ApiController]特性时,复杂类型参数才会从请求Body读取内容、调用JSON格式化器做反序列化。如果不满足这个条件,框架会默认尝试从表单、查询字符串、路由数据中匹配属性名绑定值,这个流程完全不经过JSON序列化器,只会按C#属性的原名LalaId匹配,自然识别不了[JsonProperty]配置的id别名。
  • AddNewtonsoftJson配置未实际生效,反序列化仍走System.Text.Json
    .NET Core 3.1默认的System.Text.Json不识别Newtonsoft.Json的[JsonProperty]特性,出现这个情况通常是以下子问题导致:
    1. 未安装对应版本的依赖包:.NET Core 3.1没有内置Newtonsoft.Json的MVC集成支持,必须单独安装和.NET Core 3.1大版本匹配的Microsoft.AspNetCore.Mvc.NewtonsoftJson Nuget包,否则.AddNewtonsoftJson()的配置不会生效,框架仍用System.Text.Json做反序列化。
    2. 配置顺序错误:如果在调用.AddNewtonsoftJson()之后,又调用了修改MVC输入格式化器集合的配置(比如重复注册MVC服务、修改InputFormatter列表),可能把Newtonsoft的JSON格式化器覆盖移除,回退到System.Text.Json实现。
    3. 自定义契约解析器逻辑异常:你配置的CustomJsonContractResolver如果重写了属性名映射逻辑,没有正确读取[JsonProperty]特性配置的别名,也会导致字段映射规则失效。
快速排查步骤
  1. 给接口参数显式添加[FromBody]特性,给控制器类添加[ApiController]特性,强制从请求Body绑定值:
[ApiController]
public class TestController : ControllerBase
{
    [HttpPost]
    public async Task<IActionResult> Lala([FromBody]DeleteMe requestPayload)
    {
        // do stuff
    }
}
  1. 检查项目Nuget引用,确认已安装3.1.x版本的Microsoft.AspNetCore.Mvc.NewtonsoftJson包,版本号和你项目使用的.NET Core 3.1 SDK版本保持一致。
  2. 如果前两步做完仍不生效,临时注释掉CustomJsonContractResolver的注册,用Newtonsoft默认的契约解析器测试,排查是否是自定义解析器的逻辑覆盖了[JsonProperty]的配置。

如果你不想排查Newtonsoft配置问题,也可以直接给属性加System.Text.Json自带的[JsonPropertyName("id")]特性,同样能实现字段名id和属性的映射,不需要依赖Newtonsoft的特性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:03:19