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

.NET Core 3.1如何仅为单个控制器/方法返回PascalCase格式API响应

解决.NET Core 3.1单个API控制器/方法返回PascalCase JSON的方案

在.NET Core 3.1中,默认使用System.Text.Json序列化JSON,输出格式为camelCase。要仅让指定控制器/方法返回PascalCase格式且不影响全局,可采用以下几种可行方案:

方案一:在目标Action中手动序列化并返回ContentResult

直接在需要的Action内完成PascalCase格式的JSON序列化,无需修改全局配置,实现最简单:

using System.Text.Json;

[HttpGet]
public IActionResult GetObjList()
{
    var response = new GenericModel<List<MyObject>>
    {
        Data = myobjectList
    };

    // 配置序列化选项:保留属性原名称(PascalCase)
    var serializeOptions = new JsonSerializerOptions
    {
        PropertyNamingPolicy = null
    };

    // 手动序列化为JSON字符串
    var jsonString = JsonSerializer.Serialize(response, serializeOptions);

    // 返回ContentResult指定JSON格式
    return Content(jsonString, "application/json");
}

方案二:自定义ActionFilterAttribute,按需应用

如果多个Action需要返回PascalCase格式,可创建自定义过滤器,仅在目标控制器/方法上标记使用:

1. 定义过滤器类

using System.Text.Json;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc;

public class PascalCaseJsonFilter : IResultFilter
{
    public void OnResultExecuting(ResultExecutingContext context)
    {
        if (context.Result is ObjectResult objectResult)
        {
            var serializeOptions = new JsonSerializerOptions
            {
                PropertyNamingPolicy = null
            };
            var jsonString = JsonSerializer.Serialize(objectResult.Value, serializeOptions);
            
            // 替换原ObjectResult为ContentResult,输出PascalCase JSON
            context.Result = new ContentResult
            {
                Content = jsonString,
                ContentType = "application/json",
                StatusCode = objectResult.StatusCode
            };
        }
    }

    public void OnResultExecuted(ResultExecutedContext context)
    {
        // 无需额外处理
    }
}

2. 在目标Action或控制器上应用过滤器

[HttpGet]
[TypeFilter(typeof(PascalCaseJsonFilter))]
public IActionResult GetObjList()
{
    return Ok(new GenericModel<List<MyObject>>
    {
        Data = myobjectList
    });
}

说明

  • .NET Core 3.1的System.Text.Json中没有内置JsonNamingPolicy.PascalCase(该特性在.NET 5+引入),因此通过设置PropertyNamingPolicy = null来保留属性的原始PascalCase命名。
  • 全局AddJsonOptions配置会影响所有API接口,因此不适合你的需求,上述局部方案可精准控制目标接口的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 09:31:13