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

C# Minimal API序列化响应配置问题:枚举未转为字符串返回

如何让ASP.NET Core接口返回枚举为字符串而非数字

我尝试通过以下代码配置全局JSON序列化,让接口返回的枚举转为字符串:

builder.Services.Configure<JsonSerializerOptions>(options => options.Converters.Add(new JsonStringEnumConverter()));

返回逻辑是:

return Results.Ok(new SummarizationResult(SummarizationStatus.InProcess));

枚举定义:

public enum SummarizationStatus
{
    Ok,
    Failed,
    InProcess
}

但实际返回的status字段还是数字2,而非字符串"InProcess",该如何正确配置?


原因分析

你配置的JsonSerializerOptions是.NET全局通用的序列化选项,但ASP.NET Core的API(尤其是Minimal API)默认使用**HttpJsonOptions(Minimal API场景)或MvcJsonOptions**(Controllers场景)来处理响应序列化,直接配置通用的JsonSerializerOptions不会影响API的响应输出规则。

解决方案

根据你的项目类型选择对应的配置方式:

1. 针对Minimal API(使用Results.Ok等方法)

配置HttpJsonOptions覆盖API响应的序列化规则:

builder.Services.ConfigureHttpJsonOptions(options =>
{
    // 添加字符串枚举转换器
    options.SerializerOptions.Converters.Add(new JsonStringEnumConverter());
    // 可选:如果需要将枚举转为驼峰命名(如"inProcess"),可传入命名策略
    // options.SerializerOptions.Converters.Add(new JsonStringEnumConverter(JsonNamingPolicy.CamelCase));
});

2. 针对Controllers项目

如果项目基于Controllers开发,在注册Controllers时配置序列化选项:

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

3. 单个请求临时配置(仅特殊场景使用)

如果仅需某一个接口返回字符串枚举,可在返回时直接指定序列化选项:

return Results.Json(
    new SummarizationResult(SummarizationStatus.InProcess),
    serializerOptions: new JsonSerializerOptions
    {
        Converters = { new JsonStringEnumConverter() }
    });

验证效果

配置完成后重启项目,接口返回的status字段会转为字符串:

{
    "status": "InProcess",
    "message": null,
    "summary": null
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:32:27