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

如何让NSwag生成的C#控制器返回符合预期的JSON响应?

问题:NSwag生成的C#控制器返回枚举值为整数而非字符串

我使用NSwag通过YAML文件生成服务端C#控制器代码,接口可通过Postman正常调用,但返回的JSON中枚举字段是C#代码里的整数值,而非YAML定义的可读性字符串。

简化后的YAML定义

Car:
  type: object
  required:
    - id
    - color
    - type
  properties:
    id:
      type: integer
      format: int64
    color:
      type: string
      enum: [red, yellow]
    type:
      type: string
      enum: [a, b]

GetCarByIdResponse:
  type: object
  required:
    - car
  properties:
    car:
      $ref: '#/components/schemas/Car'

NSwag生成的C#控制器代码片段

public override async Task<ActionResult<GetCarByIdResponse>> GetCarById(long id)
{
    ...
    return Ok(new GetCarByIdResponse() { car = ...});
}

预期响应格式

{
  "car": {
    "id": 1,
    "color": "yellow",
    "type": "a"
  }
}

实际响应格式

注:2024-09-27更新:双引号问题已排除,原始响应中存在双引号,仅美观输出时未显示。

{
  "car": {
    "id": 1,
    "color": 1,
    "type": 0
  }
}

解决方法

  • 调整NSwag生成配置:
    在NSwag的配置文件(如nswag.json)中,找到codeGeneratorSettings节点,设置enumHandling为String,确保生成的枚举类型默认以字符串形式序列化:

    "codeGeneratorSettings": {
      "enumHandling": "String",
      // 其他生成配置项...
    }
    

    如果使用命令行生成,添加参数:/enumHandling:String

  • 配置ASP.NET Core JSON序列化:
    在项目的Program.cs中,为控制器添加JSON字符串枚举转换器,确保返回的JSON将枚举值序列化为字符串:

    builder.Services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
        });
    

完成以上两步后,重新生成控制器代码并运行,接口返回的JSON中枚举字段就会显示为YAML定义的字符串值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:15:04