7

我有 ac# 类,我正在尝试使用Newtonsoft.Json. 该属性是一个枚举类型,我希望将该值序列化为“枚举名称的小写版本”。有一个JsonConverterAttribute可用于在属性上指定 this 和一个预先编写的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"

有任何想法吗?谢谢。

4

3 回答 3

11

好的,这似乎有效:

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

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

于 2019-02-01T17:58:42.717 回答
5

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

var settings = new JsonSerializerSettings
{
    Converters = new List<JsonConverter> {
        new StringEnumConverter(new CamelCaseNamingStrategy())
    }
};
var result = JsonConvert.SerializeObject(obj, settings);
于 2019-02-01T18:57:42.713 回答
2

这适用于我在 .Net Core web api 的一个地方启用骆驼套管:

[JsonConverter(typeof(StringEnumConverter), true)]

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

StringEnumConverter(bool camelCaseText)

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

于 2019-04-02T10:26:48.207 回答