我有一个 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; }
由于NamingStrategy
是StringEnumConverter
的属性,因此使用 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)
当然,通常首选全局启用此功能,例如此处讨论的那样。