ASP.NET Core 6 Minimal API关闭JSON驼峰序列化不生效如何解决
配置不生效的核心原因
- Minimal API 有独立的JSON序列化配置体系,和
AddControllers()注册的MVC/Controller序列化管线互不影响,给Controller配置的Newtonsoft.Json规则不会作用到Minimal API接口 - Minimal API 默认使用内置
System.Text.Json作为序列化器,默认规则是输出驼峰命名(camelCase),和Newtonsoft.Json的配置体系完全独立 - 很多人容易混淆两个不同命名空间下的
JsonOptions:Minimal API使用的是Microsoft.AspNetCore.Http.Json.JsonOptions,而MVC/Controller使用的是Microsoft.AspNetCore.Mvc.JsonOptions,配错命名空间的话规则不会生效。
正确配置方法
最简方案(推荐)
不需要自定义命名策略类,直接将Minimal API的JSON属性命名策略设为null,即可100%保留C#成员定义的原始大小写,不会做任何命名转换,比自定义首字母大写的逻辑更准确(自定义逻辑会强制把所有属性名首字母转大写,无法保留本身就是小驼峰命名的属性原名):
var webAppBuilder = WebApplication.CreateBuilder(args); // 配置Minimal API全局JSON序列化规则 webAppBuilder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>(opt => { // 不做任何命名转换,完全遵循成员原始大小写 opt.SerializerOptions.PropertyNamingPolicy = null; });
同时兼容Controller和Minimal API的配置
如果项目里同时存在基于Controller的接口和Minimal API接口,需要分别给两套管线配置相同规则,才能保证全局序列化行为一致:
// 配置Controller的序列化规则 webAppBuilder.Services.Configure<Microsoft.AspNetCore.Mvc.JsonOptions>(opt => { opt.JsonSerializerOptions.PropertyNamingPolicy = null; }); // 配置Minimal API的序列化规则 webAppBuilder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>(opt => { opt.SerializerOptions.PropertyNamingPolicy = null; });
关于自定义MemberCasing类的说明
你之前找到的自定义MemberCasing类方案存在逻辑缺陷:它会强制将所有属性名的首字母转为大写,如果类中本身存在首字母小写的属性(比如定义了public string userName { get; set; }),序列化后会被错误转为UserName,不符合“严格遵循成员大小写”的需求,除非你有强制首字母大写的特殊需求,否则不推荐使用。
内容的提问来源于stack exchange,提问作者pantonis
相关产品推荐
相关产品推荐

