ASP.NET Core属性类型无效时ModelBinding返回对象为null的解决咨询
ASP.NET Core 7.x 模型绑定类型不匹配导致对象为null的解决办法
问题场景
在ASP.NET Core 7.x的Post接口中使用如下record定义:
public record Something(int? SomeProperty, int? AnotherProperty);
接口代码:
public async Task<IActionResult> DoSomething([FromBody]Something something) {...}
当客户端发送包含类型不匹配属性的JSON时:
{ "someProperty": "1", "anotherProperty": 2 }
模型绑定会静默失败,something对象直接为null——即便存在有效值属性,整个对象也无法完成绑定。需求是仅将类型错误的属性反序列化为null,而非丢弃整个对象。
解决方案
需要修改JSON序列化配置,在Program.cs中添加如下配置:
builder.Services.AddControllers() .AddJsonOptions( options => { options.JsonSerializerOptions.NumberHandling = JsonNumberHandling.AllowReadingFromString; } );
配置说明
该配置允许JSON序列化器将字符串格式的数字(比如示例中的"1")反序列化为数值类型,避免因单个属性类型不匹配导致整个对象绑定失败。对应官方文档说明:ASP.NET Core应用允许反序列化带引号的数字。
内容的提问来源于stack exchange,提问作者Alexander Zeitler
相关产品推荐
相关产品推荐

