Asp.net Core Razor Pages全局驼峰序列化配置失效问题求助
嘿,这个问题我之前也踩过坑!核心原因是ASP.NET Core 3.0及以后版本默认改用了System.Text.Json作为JSON序列化器,而你配置的CamelCasePropertyNamesContractResolver是Newtonsoft.Json(也就是Json.NET)里的类,对默认的序列化器完全不起作用~
下面给你两种针对性的解决方案:
方案一:用默认的System.Text.Json配置(推荐)
因为你是Razor Pages项目,直接在Startup.cs的ConfigureServices里用AddRazorPages来配置,替换你原来的代码:
services.AddRazorPages() .AddJsonOptions(options => { // 启用全局驼峰命名策略 options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase; // 如果需要忽略null值,可以额外添加这行 // options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull; });
配置完成后,所有通过JsonResult返回的JSON都会自动转换成驼峰命名格式。
方案二:继续使用Newtonsoft.Json(Json.NET)
如果你的项目依赖Newtonsoft的特殊特性(比如复杂的自定义序列化规则),那得先安装对应的NuGet包:Microsoft.AspNetCore.Mvc.NewtonsoftJson,然后再配置:
services.AddRazorPages() .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); // 这里还可以添加其他Newtonsoft专属配置,比如日期格式 // options.SerializerSettings.DateFormatString = "yyyy-MM-dd"; });
最后要注意的小细节
确保你在Razor Page后台返回JSON时,用的是return new JsonResult(你的数据模型);,而不是自己手动用JsonConvert.SerializeObject然后返回Content——后者会绕过全局配置,导致驼峰命名不生效!
比如正确的返回示例:
public IActionResult OnGetUserInfo() { var user = new { UserName = "Ray", Age = 30 }; return new JsonResult(user); }
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

