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
相关产品推荐
相关产品推荐

