我试图使用Newtonsoft的JsonConvert将对象列表序列化为JSON。我的标记类包含一个枚举,我正在尝试将它序列化为一个camelCase字符串。基于其他堆栈溢出问题,我尝试使用StringEnumConverter
public enum MarkerType
{
None = 0,
Bookmark = 1,
Highlight = 2
}
public class Marker
{
[JsonConverter(typeof(StringEnumConverter)]
public MarkerType MarkerType { get; set; }
}
这部分有效,但是当我调用时,我的MarkerType字符串是PascalCase:
var json = JsonConvert.SerializeObject(markers, Formatting.None);
结果:
{
...,
"MarkerType":"Bookmark"
}
我真正想要的是:
{
...,
"MarkerType":"bookmark"
}
StringEnumConverter文档提到了一个CamelCaseText
属性,但我不知道如何使用JsonConverterAttribute
传递该属性。以下代码失败:
[JsonConverter(typeof(StringEnumConverter), new object[] { "camelCaseText" }]
如何为CamelCaseText
中的StringEnumConverter
指定JsonConverterAttribute
属性
发布于 2016-06-13 08:57:09
JsonConverterAttribute有两个构造函数,其中一个接受参数列表(Object[]
)。这将从第一个参数映射到类型的构造函数。
StringEnumConverter可以用它的大多数非默认构造函数来处理这个问题。
第一个在JSON.net 12+中已经过时
第二个允许您指定NamingStrategy类型;CamelCaseNamingStrategy可以完成此任务。实际上,在所提供的六个构造函数中,有三个是这样的。
注意:另一个构造函数打破了模型,请求一个NamingStrategy实例,而不是一个类型。
看起来是这样的:
[JsonConverter(typeof(StringEnumConverter), typeof(CamelCaseNamingStrategy))]
public MarkerType MarkerType { get; set; }
https://stackoverflow.com/questions/37795279
复制