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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:13:35