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

如何在JsonSerializerContext中使用带蛇形小写的JsonStringEnumConverter

问题描述

现有代码执行后输出的JSON如下:

{
  "ticket_state": 0
}

希望添加使用JsonNamingPolicy.SnakeCaseLower命名策略的JsonStringEnumConverter,使输出变为:

{
  "ticket_state": "in_progress"
}

相关原始代码如下:

Ticket ticket = new Ticket()
{
    State = TicketState.InProgress
};

string serialized = JsonSerializer.Serialize(ticket, JsonContext.Default.Ticket);

Console.WriteLine(serialized);

public class Ticket
{
    [JsonPropertyName("ticket_state")]
    public TicketState State { get; set; }
}

public enum TicketState
{
    InProgress, WaitingOnCustomer, Resolved
}

[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(Ticket))]
internal partial class JsonContext : JsonSerializerContext
{

}
解决方案

只需修改JsonSourceGenerationOptions特性,添加枚举转换器并指定蛇形小写命名策略即可,具体修改如下:

  • 在JsonSourceGenerationOptions特性中,添加Converters = new[] { typeof(JsonStringEnumConverter) },启用枚举转字符串的序列化规则
  • 同时设置PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,让枚举成员名称自动转换为蛇形小写格式

修改后的完整代码:

Ticket ticket = new Ticket()
{
    State = TicketState.InProgress
};

string serialized = JsonSerializer.Serialize(ticket, JsonContext.Default.Ticket);

Console.WriteLine(serialized);

public class Ticket
{
    [JsonPropertyName("ticket_state")]
    public TicketState State { get; set; }
}

public enum TicketState
{
    InProgress, WaitingOnCustomer, Resolved
}

[JsonSourceGenerationOptions(
    WriteIndented = true,
    Converters = new[] { typeof(JsonStringEnumConverter) },
    PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower
)]
[JsonSerializable(typeof(Ticket))]
internal partial class JsonContext : JsonSerializerContext
{

}
说明
  • JsonStringEnumConverter负责将枚举值序列化为对应的字符串名称,替代默认的数字值输出
  • JsonNamingPolicy.SnakeCaseLower会自动将枚举的驼峰命名(如InProgress)转换为蛇形小写格式(如in_progress)
  • 这种通过源生成上下文统一配置的方式,无需在每个枚举属性上单独加特性,配置更简洁高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:57:20