在 class 属性 上使用 JsonConverter 时选择 NamingStrategy
Selecting a NamingStrategy when using a JsonConverter on a class property
我有一个 c# class,我正在尝试使用 Newtonsoft.Json
正确序列化。 属性 是枚举类型,我希望将值序列化为 "lowercase version of the enumeration name"。有一个 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
is a property of the StringEnumConverter
it's applied using the 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)]
请注意,您可以将构造函数参数附加到第一个参数给定的类型,StringEnumConverter
具有以下重载构造函数:
StringEnumConverter(bool camelCaseText)
当然,通常首选全局启用此功能,例如 here 所讨论的。
我有一个 c# class,我正在尝试使用 Newtonsoft.Json
正确序列化。 属性 是枚举类型,我希望将值序列化为 "lowercase version of the enumeration name"。有一个 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
is a property of the StringEnumConverter
it's applied using the 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)]
请注意,您可以将构造函数参数附加到第一个参数给定的类型,StringEnumConverter
具有以下重载构造函数:
StringEnumConverter(bool camelCaseText)
当然,通常首选全局启用此功能,例如 here 所讨论的。