ASP.NET Core中如何忽略JSON重复字段并匹配目标类型属性?
嘿,这个场景我太熟悉了!ASP.NET Core里的JSON序列化默认会忽略大小写匹配字段,刚好能解决你说的要严格匹配属性名大小写、忽略不匹配字段的需求,分两种常用情况给你说解决方案:
针对System.Text.Json(ASP.NET Core 3.0+默认使用)
ASP.NET Core 3.0之后默认用的是System.Text.Json,它默认开启了大小写不敏感匹配。要改成严格匹配,只需要在全局配置里关闭这个选项就行:
在Program.cs(.NET 6+)或者Startup.cs(旧版本)中配置控制器服务时,修改JSON序列化选项:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers() .AddJsonOptions(options => { // 关闭大小写不敏感匹配,只识别和属性名完全一致的字段 options.JsonSerializerOptions.PropertyNameCaseInsensitive = false; // 确保不要设置命名策略(比如驼峰),保持默认的精确匹配 options.JsonSerializerOptions.PropertyNamingPolicy = null; }); var app = builder.Build(); app.MapControllers(); app.Run();
这样配置后,序列化器只会匹配和目标类属性大小写完全一致的字段——就像你例子里的Value会被正确绑定,而小写的value会被直接忽略。
针对Newtonsoft.Json(Json.NET)
如果你的项目还在使用Newtonsoft.Json(比如通过AddNewtonsoftJson()替换了默认序列化器),那需要调整契约解析器的大小写忽略设置:
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver { // 关闭大小写忽略,启用严格匹配 IgnoreCase = false }; }); var app = builder.Build(); app.MapControllers(); app.Run();
Newtonsoft.Json默认也是开启大小写不敏感的,把IgnoreCase设为false后,就会严格按照属性名的大小写来匹配字段了。
小补充
如果只是个别模型需要这个规则,也可以在模型属性上用特性指定匹配的字段名(比如System.Text.Json的[JsonPropertyName("Value")]),但全局配置显然更适合你说的“多数数据存在重复字段”的场景。
内容的提问来源于stack exchange,提问作者herme 0
相关产品推荐
相关产品推荐

