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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:36:03