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

如何让OrchestrationRuntimeStatus枚举序列化时输出整数而非字符串

解决方案

你当前枚举序列化为字符串的核心原因是RuntimeStatus属性上显式标注了[JsonConverter(typeof(StringEnumConverter))]特性,该特性会强制Newtonsoft.Json将枚举值序列化为名称字符串,按以下方案调整即可输出对应的整数值:

方案1:直接移除属性上的转换器特性(最简便)

删除status类中RuntimeStatus属性上的[JsonConverter(typeof(StringEnumConverter))]标记即可,默认配置下Newtonsoft.Json会将枚举类型序列化为对应的底层整数值:

public sealed class status
{
    // 移除JsonConverter特性标记即可
    public OrchestrationRuntimeStatus RuntimeStatus { get; set; }
}

方案2:全局配置序列化规则(适用于所有枚举统一输出数值的场景)

如果你是在ASP.NET Core项目中,可通过全局配置覆盖序列化规则,无需修改单个属性的标记:

基于Newtonsoft.Json(Json.NET)的配置

在Program.cs(.NET 6+)中添加如下配置:

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        // 移除全局的字符串枚举转换器,默认输出数值
        options.SerializerSettings.Converters.RemoveAll(c => c is StringEnumConverter);
    });
基于System.Text.Json的配置

如果你使用的是.NET自带的System.Text.Json序列化组件,配置如下:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 移除全局的字符串枚举转换器,默认输出数值
        options.JsonSerializerOptions.Converters.RemoveAll(c => c is JsonStringEnumConverter);
    });

方案3:单独为当前返回接口自定义序列化配置

如果你需要保留其他场景下枚举序列化为字符串的逻辑,仅在当前接口返回数值,可在构造返回结果时指定序列化设置:

// 自定义序列化配置,不使用StringEnumConverter
var serializeSettings = new JsonSerializerSettings
{
    Converters = new List<JsonConverter>()
};
// 手动序列化对象后再传入返回结果,或者修改OkObjectResultWithHeaders方法支持传入自定义序列化配置
var jsonResult = JsonConvert.SerializeObject(statusObj, serializeSettings);
return new OkObjectResultWithHeaders(jsonResult, headers)
{
    ContentType = "application/json"
};

调整完成后,接口返回的RuntimeStatus字段就会输出-1、0这类对应的整数值,反序列化时也同时支持传入整数值自动映射到对应的枚举成员。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:27:03