ASP.NET Core接口返回JSON未保留类属性原有大小写如何解决
问题根因
ASP.NET Core 默认的JSON序列化组件会自动对属性名做转换处理,不会保留C#类定义的原始大小写,是框架默认配置导致的该问题。
解决方案
以下三种方案可按需选择:
方案1:全局配置保留原始属性大小写(推荐,全项目统一规则)
如果项目使用默认的System.Text.Json序列化组件,修改Program.cs(.NET 6+)或Startup.cs的服务注册配置即可:
// .NET 6+ Program.cs 示例 builder.Services.AddControllers() .AddJsonOptions(options => { // 禁用自动属性名转换,保留类定义的原始大小写 options.JsonSerializerOptions.PropertyNamingPolicy = null; });
如果项目使用Newtonsoft.Json作为序列化组件,配置如下:
builder.Services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = null; });
方案2:单独为指定类/属性固定序列化名称(适合仅个别类需要自定义规则的场景)
在属性上添加序列化名称指定特性即可:
// System.Text.Json 用以下特性,需引入命名空间 using System.Text.Json.Serialization; public class AllClientsDataModelDb { [JsonPropertyName("IDCLIENT")] public long IDCLIENT { get; set; } [JsonPropertyName("CL_CODE")] public string CL_CODE { get; set; } // 其余属性按上述规则添加对应特性即可 }
如果使用Newtonsoft.Json,将[JsonPropertyName]替换为[JsonProperty]即可。
方案3:单个接口临时生效(不需要修改全局或类定义)
直接在接口返回时手动指定序列化配置:
public async Task<ActionResult<List<AllClientsDataModelDb>>> GetAll() { var ReturnValue = await Clda.GetClients(new { cm = 1 }); return new JsonResult(ReturnValue, new JsonSerializerOptions { PropertyNamingPolicy = null }); }
内容的提问来源于stack exchange,提问作者lzaek
相关产品推荐
相关产品推荐

