我正在尝试使用Newtonsoft的JsonConvert将对象列表序列化为JSON。我的Marker类包含一个枚举,我正在尝试将它序列化为一个camelCase字符串。根据其他Stackoverflow问题,我正在尝试使用public enum MarkerType
{
None = 0,
Bookmark = 1,
Highlight = 2
}
public class Marker
{
[JsonConverter(typeof(StringEnumConverter)]
public MarkerType MarkerType { get; set; }
}
:
var json = JsonConvert.SerializeObject(markers, Formatting.None);
这部分有效,但是当我打电话时,我的MarkerType字符串是PascalCase:
{
...,
"MarkerType":"Bookmark"
}
结果:
{
...,
"MarkerType":"bookmark"
}
我真正想要的是:
CamelCaseText
StringEnumConverter docs提及JsonConverterAttribute
属性,但我不确定如何使用[JsonConverter(typeof(StringEnumConverter), new object[] { "camelCaseText" }]
传递该属性。以下代码失败:
CamelCaseText
如何在StringEnumConverter
中为JsonConverterAttribute
指定Object[]
属性?
答案 0 :(得分:12)
JsonConverterAttribute有两个构造函数,其中一个构造函数采用参数列表(camelCaseText
)。这将映射到类型的构造函数。
由于StringEnumConverter's constructors中的一个为[JsonConverter(typeof(StringEnumConverter), new object[] { true })]
public MarkerType MarkerType { get; set; }
获取了一个布尔值,您只需要在属性行中传递它:
AllowIntegerValues
请注意,这仅限于构造函数;无法使用StringEnumConverter
语法在JsonConverterAttribute
上设置camelCaseText
,因为唯一的非默认构造函数只接受-dontobfuscate
的参数。