.NET 6中JsonPropertyName/JsonProperty特性失效,接收short_name值为null
解决.NET 6中JSON属性映射失效问题
问题分析
核心问题是序列化特性与项目默认使用的JSON序列化器不匹配:
- .NET 6默认采用
System.Text.Json作为JSON处理库,对应的属性映射特性是[JsonPropertyName] - 你代码中使用的
[JsonProperty]是Newtonsoft.Json(Json.NET)库的特性,在未配置启用Newtonsoft的情况下不会生效 - 传入
shortName时能正常映射,是因为System.Text.Json默认启用驼峰命名策略,自动将类属性ShortName映射为JSON中的shortName
解决方案
方案1:使用System.Text.Json原生特性(推荐)
修改ProductPayload类的ShortName属性,替换为System.Text.Json对应的特性,并确保引用正确命名空间:
using System.Text.Json.Serialization; // 必须添加此命名空间 public class ProductPayload { public string Id { get; set; } [JsonPropertyName("short_name")] // 替换为该特性 public string ShortName { get; set; } // 其余属性保持不变 }
方案2:配置项目使用Newtonsoft.Json
若习惯使用Newtonsoft.Json,按以下步骤配置:
- 安装NuGet包:
Microsoft.AspNetCore.Mvc.NewtonsoftJson - 修改
Startup.cs的ConfigureServices方法,添加NewtonsoftJson支持:
services.AddControllersWithViews() .AddNewtonsoftJson(); // 新增此行
此时原代码中的[JsonProperty(PropertyName = "short_name")]特性即可正常生效。
额外验证点
- 检查是否存在全局序列化配置覆盖属性特性(特性优先级高于全局配置,一般不影响)
- 确认JSON请求中的
short_name拼写完全正确,无大小写或符号错误
内容的提问来源于stack exchange,提问作者NiceToMytyuk
相关产品推荐
相关产品推荐

