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

.NET 8升级后需将JSON属性首字母改为小写的原因咨询

问题:.NET 8升级后JSON属性首字母大小写变化导致前端取值失效

此前使用.NET 7.x(ASP.NET Core 7 MVC)与jQuery v1.10.2,通过Ajax从控制器获取数据的代码运行正常。但升级至.NET 8(ASP.NET Core MVC)并更新jQuery至v3.7.1后,原有代码失效,必须将前端取值的属性首字母改为小写(从var sentdata = msg.Name;改为var sentdata = msg.name;)才能正常运行。

前端请求代码

function SendRequestToGetData() {
   var xhr = $.ajax({
     url: "/Line/GetData",
     type: 'POST',
     dataType: 'json',
     contentType: 'application/json; charset=utf-8',
     success: function (msg) {
        // 原代码:此处通过msg.Name获取属性
        var sentdata = msg.Name;
      },
      error: function (xhr) {}
   });
 }

后端控制器代码

public class TestObject
{
    public string Name { get; set; }
}

//------------------------------------------------

public class LineController : Controller
{
    [HttpPost]
    public JsonResult GetData()
    {
        TestObject testbject = new TestObject { Name = "xxxxxxx" };
        return Json(testbject);
    }
}

解答

核心原因是ASP.NET Core 8 MVC 默认替换了JSON序列化器,且默认序列化行为发生改变:

  • .NET 7及更早版本的ASP.NET Core MVC中,JsonResult默认使用Newtonsoft.Json(Json.NET)作为序列化工具,该工具默认保留C#类属性的PascalCase命名规则(即C#中的Name序列化后依然是JSON中的"Name")。
  • .NET 8开始,ASP.NET Core MVC默认改用System.Text.Json作为序列化器,而System.Text.Json的默认配置会自动将C#的PascalCase属性转换为JavaScript生态常用的camelCase(即C#中的Name序列化后变为JSON中的"name")。

至于jQuery版本升级(从1.10.2到3.7.1),并非导致该问题的直接原因——新版本jQuery处理JSON响应时对属性大小写的敏感性和旧版本一致,只是后端返回的JSON字段名发生了变化,因此前端必须对应使用小写首字母才能正确取值。

恢复旧行为的可选方案

如果需要保持JSON输出为PascalCase,可在Program.cs中修改配置:

  1. 调整System.Text.Json的序列化规则:
builder.Services.AddControllersWithViews()
    .AddJsonOptions(options =>
    {
        // 禁用自动转换为camelCase,保留原属性命名
        options.JsonSerializerOptions.PropertyNamingPolicy = null;
    });
  1. 或者重新启用Newtonsoft.Json作为序列化器:
// 先安装NuGet包:Microsoft.AspNetCore.Mvc.NewtonsoftJson
builder.Services.AddControllersWithViews()
    .AddNewtonsoftJson();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:52:32