为了账号安全,请及时绑定邮箱和手机立即绑定

在类属性上使用 JsonConverter 时选择命名策略

在类属性上使用 JsonConverter 时选择命名策略

C#
守着星空守着你 2022-08-20 16:58:50
我有一个c#类,我正在尝试使用正确序列化。该属性是枚举类型,我希望将值序列化为“枚举名称的小写版本”。有一个可用于在属性上指定此属性,还有一个预写,但我需要在该转换器上指定CamelCaseNamingStrategy,但我无法计算出语法。Newtonsoft.JsonJsonConverterAttributeStringEnumConverter我试图在属性本身上分配它: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"有什么想法吗?谢谢。
查看完整描述

3 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

好的,这似乎有效:


[JsonProperty("type")] 

[JsonConverter(typeof(StringEnumConverter), 

     converterParameters:typeof(CamelCaseNamingStrategy))]

public ChartType ChartType { get; }  

由于命名策略是使用转换器参数应用的属性。这得到了我想要的输出。我认为这方面的一个例子在Newtonsoft文档中很有用。StringEnumConverter


查看完整回答
反对 回复 2022-08-20
?
开满天机

TA贡献1786条经验 获得超13个赞

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


var settings = new JsonSerializerSettings

{

    Converters = new List<JsonConverter> {

        new StringEnumConverter(new CamelCaseNamingStrategy())

    }

};

var result = JsonConvert.SerializeObject(obj, settings);


查看完整回答
反对 回复 2022-08-20
?
隔江千里

TA贡献1906条经验 获得超10个赞

这适用于我在.Net Core Web API中的单个位置启用骆驼外壳:

[JsonConverter(typeof(StringEnumConverter), true)]

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

StringEnumConverter(bool camelCaseText)

当然,通常首选全局启用此功能,例如,此处将对此进行讨论。


查看完整回答
反对 回复 2022-08-20
  • 3 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信