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

