在类属性上使用 JsonConverter 时选择 NamingStrategy

Chr*_*lsh 7 c# json.net jsonconverter

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

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

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

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

[JsonConverter(typeof(StringEnumConverter),NamingStrategy=typeof(CamelCaseNamingStrategy))]
public enum ChartType { Pie, Bar }
Run Code Online (Sandbox Code Playgroud)

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

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

有任何想法吗?谢谢。

Chr*_*lsh 9

好的,这似乎有效:

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

AsNamingStrategyStringEnumConverter使用converterParameters参数应用它的属性。这得到了我想要的输出。我认为这个例子在 Newtonsoft 文档中会很有用。


Ale*_*der 5

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

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