在类属性上使用 JsonConverter 时选择命名策略



我有一个 c# 类,我正在尝试使用 Newtonsoft.Json 正确序列化。 该属性是枚举类型,我希望将该值序列化为"枚举名称的小写版本"。 有一个JsonConverterAttribute可用于在属性上指定它,还有一个预先编写的StringEnumConverter但我需要在该转换器上指定CamelCaseNamingStrategy,但我无法计算语法。

我试图将其分配给属性本身:

public class C
{
    [JsonConverter(typeof(StringEnumConverter),NamingStrategy=typeof(CamelCaseNamingStrategy))]
    public ChartType ChartType { get; set; }
}

我也尝试将其类似地添加到枚举类型本身:

[JsonConverter(typeof(StringEnumConverter),NamingStrategy=typeof(CamelCaseNamingStrategy))]
public enum ChartType { Pie, Bar }

但是语法是错误的。 我在Newtonsoft文档中找不到任何示例。

所需的序列化将是:"ChartType":"pie""ChartType":"bar"

有什么想法吗? 谢谢。

好的,这似乎有效:

[JsonProperty("type")] 
[JsonConverter(typeof(StringEnumConverter), 
     converterParameters:typeof(CamelCaseNamingStrategy))]
public ChartType ChartType { get; }  

由于NamingStrategyStringEnumConverter的属性,因此使用 converterParameters 参数应用。 这得到了我想要的输出。 我认为这方面的一个例子在 Newtonsoft 文档中很有用。

另一种可能的解决方案是使用JsonSerializerSettings

var settings = new JsonSerializerSettings
{
    Converters = new List<JsonConverter> {
        new StringEnumConverter(new CamelCaseNamingStrategy())
    }
};
var result = JsonConvert.SerializeObject(obj, settings);

这适用于我在 .Net Core Web API 中的单个位置启用骆驼外壳:

[JsonConverter(typeof(StringEnumConverter), true)]

请注意,您可以将构造函数参数追加到第一个参数给定的类型,StringEnumConverter具有以下重载构造函数:

StringEnumConverter(bool camelCaseText)

当然,通常首选全局启用此功能,例如此处讨论的那样。

相关内容

  • 没有找到相关文章

最新更新