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

ASP.NET Core Web API下划线属性名序列化异常问题及修复

问题产生原因

ASP.NET Core 3.0及以上版本默认使用System.Text.Json作为内置JSON序列化器,全局默认配置的属性命名策略为JsonNamingPolicy.CamelCase(小驼峰命名规则)。
在.NET 6之前的版本中,该内置小驼峰命名策略存在实现缺陷:当属性名包含下划线_时,转换逻辑会将第一个下划线识别为强制单词边界,错误地将第一个下划线前的字符段中,除紧邻下划线的最后一个字符外的所有前置字符全部转为小写,下划线及后续所有字符不做任何大小写转换。
该缺陷的表现和测试用例完全匹配:

  • AAAA_BBBB:第一个下划线前共4个A,最后1个A保留大写,前3个A转小写,得到aaaA_BBBB
  • AAAAAAAA_BBB_CCC_DDD:第一个下划线前共8个A,最后1个A保留大写,前7个A转小写,得到aaaaaaaA_BBB_CCC_DDD
  • A_BBB:第一个下划线前共1个A,没有前置字符,直接转小写得到a_BBB
  • AA_BB:第一个下划线前共2个A,最后1个A保留大写,前1个A转小写,得到aA_BB
修复方案

根据实际需求选择对应方案即可:

  • 方案1:不需要全局小驼峰命名时,直接关闭默认命名转换策略
    在服务配置阶段将JSON序列化选项的PropertyNamingPolicy设为null,序列化后的属性名会和C#代码中定义的名称完全一致。
    .NET 6+ 顶层语句配置代码:
    builder.Services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNamingPolicy = null;
        });
    
    .NET Core 3.1/.NET 5 Startup.cs配置代码:
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers()
            .AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.PropertyNamingPolicy = null;
            });
    }
    
  • 方案2:需要保留全局小驼峰命名时
    可选两种处理方式:
    1. 将项目升级到.NET 6及以上版本,新版本的System.Text.Json已经修复了该命名策略转换缺陷,转换逻辑符合标准小驼峰预期。
    2. 无法升级框架版本时,可切换序列化器为Newtonsoft.Json(Json.NET),该库的小驼峰转换逻辑不存在该缺陷。操作步骤为:先安装对应版本的Microsoft.AspNetCore.Mvc.NewtonsoftJson NuGet包,再修改服务配置:
      // .NET 6+ 示例
      builder.Services.AddControllers()
          .AddNewtonsoftJson(options =>
          {
              options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
          });
      
  • 方案3:仅需调整个别属性的序列化名称时
    不需要修改全局配置,直接给对应属性添加[JsonPropertyName]特性,显式指定序列化后的属性名即可:
    public class TestClass
    {
        [JsonPropertyName("aaaaBBBB")] // 替换为实际需要的序列化名称
        public string AAAA_BBBB { get; set; } = "1";
    }
    

内容的提问来源于stack exchange,提问作者Ash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:09:25