让 Action 返回的 JSON 保持属性原名(PascalCase),不转换为驼峰
新老接口交替,导致的,只能保持了,使用方式,在接口上加上这个特性
/// <summary> /// 让 Action 返回的 JSON 保持属性原名(PascalCase),不转换为驼峰 /// </summary> [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = false)] public class PascalCaseJsonAttribute : ActionFilterAttribute { private readonly bool _keepOriginalName; private readonly bool _ignoreNull; private readonly string _dateFormat; /// <summary> /// /// </summary> /// <param name="keepOriginalName">是否保持属性原名(true=保持PascalCase,false=使用驼峰)</param> /// <param name="ignoreNull">是否忽略null值</param> /// <param name="dateFormat">日期格式</param> public PascalCaseJsonAttribute(bool keepOriginalName = true, bool ignoreNull = true, string dateFormat = "yyyy-MM-dd HH:mm:ss") { _keepOriginalName = keepOriginalName; _ignoreNull = ignoreNull; _dateFormat = dateFormat; } public override void OnActionExecuted(ActionExecutedContext context) { // 检查是否有异常或结果为空 if (context.Exception != null || context.Result == null) { base.OnActionExecuted(context); return; } // 如果结果是 ObjectResult,修改其序列化设置 if (context.Result is ObjectResult objectResult) { // 创建序列化设置 var settings = new JsonSerializerSettings { DateFormatString = _dateFormat, ContractResolver = _keepOriginalName ? new DefaultContractResolver() // 保持原名 : new CamelCasePropertyNamesContractResolver(), // 驼峰命名 NullValueHandling = _ignoreNull ? NullValueHandling.Ignore : NullValueHandling.Include, Formatting = Formatting.None // 生产环境一般不缩进 }; // 添加你已有的转换器 settings.Converters.Add(new LongToStringConverter()); settings.Converters.Add(new NullableLongToStringConverter()); // 重新设置结果 objectResult.Formatters.Add(new NewtonsoftJsonOutputFormatter( settings, context.HttpContext.RequestServices.GetRequiredService<ArrayPool<char>>(), context.HttpContext.RequestServices.GetRequiredService<IOptions<MvcOptions>>().Value )); } base.OnActionExecuted(context); } }

浙公网安备 33010602011771号