我有一个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 documentation找不到任何这方面的例子。
所需的序列将是:"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)]
请注意,您可以将构造函数参数附加到第一个参数给定的类型,并且`StringEnumerConverter具有以下重载的构造函数:
StringEnumConverter(bool camelCaseText)
当然,通常首选全局启用此功能,例如here所讨论的。