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

.NET 4.5.2 MVC接收含下划线JSON属性时部分字段值为null

问题分析与解决方案

咱们一步步来排查你遇到的JSON模型绑定部分字段为null的问题:

1. 先修复JSON请求的语法错误

你提供的JSON开头多了一个左大括号{{,这是无效的JSON格式,序列化器解析时会直接出错,这大概率是导致部分字段绑定失败的直接原因。修正后的正确JSON应该是:

{
  "channel": "/api/v5",
  "action": "added",
  "resource_id": "d5276373-a975-43d5-a361-6947b20bb666",
  "app_user_auth": {
    "access_token": "78505b15-3c46-4287-8658-f52238b94724",
    "token_type": "Bearer",
    "expires_in": 300,
    "user_id": "7e575bd7-3a4a-46bd-b449-c99d919de8534",
    "organization_id": "a5f832fa-6226-4a6f-a7ff-b75758fd57ed"
  }
}

2. 检查控制器特性混用问题

你在控制器上同时用了System.Web.Mvc.Route(MVC路由特性)和System.Web.Http.HttpPost(Web API特性),这会导致绑定逻辑混乱:

  • 如果这是Web API控制器,请确保你的控制器继承自System.Web.Http.ApiController,而不是普通的System.Web.Mvc.Controller,并且替换成System.Web.Http.Route特性来定义路由。
  • 如果这是MVC控制器,[FromBody]在MVC中的绑定逻辑和Web API不一样,MVC默认不会自动识别Newtonsoft的[JsonProperty]特性,需要额外配置。

3. 确保Newtonsoft.Json被正确配置为序列化器

你已经在模型类上用了Newtonsoft的[JsonProperty]特性,但得确保项目配置了用它来做JSON序列化:

针对Web API项目:

在Global.asax的Application_Start方法里添加配置:

GlobalConfiguration.Configure(config =>
{
    // 保证JSON格式化器使用Newtonsoft.Json,让你的JsonProperty特性生效
    config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
});

针对MVC项目:

如果是MVC控制器,需要替换默认模型绑定器为Newtonsoft的实现,或者在Global.asax里配置:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    
    // 配置MVC使用Newtonsoft.Json处理模型绑定
    var jsonSettings = new Newtonsoft.Json.JsonSerializerSettings();
    jsonSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
    ModelBinders.Binders.Add(typeof(Request), new NewtonsoftJsonModelBinder(jsonSettings));
}

(注:NewtonsoftJsonModelBinder需要你自行实现,或者使用第三方提供的绑定器,也可以通过配置MVC视图引擎来全局启用Newtonsoft序列化)

4. 小细节:检查字段值的合法性

注意到user_id的值"7e575bd7-3a4a-46bd-b449-c99d919de8534"比标准GUID多了一位(标准是36字符,这个是37位),虽然你的UserId是string类型不会直接报错,但如果后续要转成Guid类型会出问题,建议确认这个值的正确性。

先修复JSON语法错误,再调整控制器配置,应该就能解决部分字段为null的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:12:30