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

C# GET请求返回枚举被序列化为整数,如何获取枚举对应字符串值?

方案1:使用.NET 内置 System.Text.Json 序列化器(.NET Core 3.0+ / .NET 5+ 默认使用)

仅针对单个枚举属性配置

在对应的枚举属性上添加JsonConverter特性即可:

using System.Text.Json.Serialization;

class Person {
    // 加该特性指定枚举序列化为字符串
    [JsonConverter(typeof(JsonStringEnumConverter))]
    public Title PersonTitle{ get; set;}
    public string Name { get; set;}
}

enum Title {
   STUDENT,
   TEACHER,
   DIRECTOR
}

全局配置所有枚举都序列化为字符串

如果需要项目内所有接口的枚举都返回字符串,在ASP.NET Core的服务注册阶段添加全局配置:

// .NET 6+ Program.cs 示例
var builder = WebApplication.CreateBuilder(args);

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

如果是手动序列化场景,直接在序列化时传入转换器:

var options = new JsonSerializerOptions
{
    Converters = { new JsonStringEnumConverter() }
};
string jsonResult = JsonSerializer.Serialize(first, options);

方案2:使用Newtonsoft.Json(Json.NET)序列化器

仅针对单个枚举属性配置

using Newtonsoft.Json;
using Newtonsoft.Json.Converters;

class Person {
    [JsonConverter(typeof(StringEnumConverter))]
    public Title PersonTitle{ get; set;}
    public string Name { get; set;}
}

全局配置所有枚举都序列化为字符串

// .NET 6+ Program.cs 示例
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.Converters.Add(new StringEnumConverter());
    });

手动序列化时的用法:

string jsonResult = JsonConvert.SerializeObject(first, new StringEnumConverter());

配置完成后,你示例的返回结果会变成:

[
  {
    "Name": "Dave",
    "PersonTitle": "STUDENT"
  }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:27:03