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

问题描述 投票:1回答:3

我有一个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"

有任何想法吗?谢谢。

c# json.net jsonconverter
3个回答
3
投票

好的,这似乎有效:

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

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


1
投票

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

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

0
投票

这适用于我在.Net Core web api中的单个位置启用驼峰套管:

[JsonConverter(typeof(StringEnumConverter), true)]

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

StringEnumConverter(bool camelCaseText)

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

© www.soinside.com 2019 - 2024. All rights reserved.