如何将属性传递给JsonConverterAttribute中的StringEnumConverter

时间:2016-06-13 16:57:10

标签: c# json.net

我正在尝试使用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[]属性?

1 个答案:

答案 0 :(得分:12)

JsonConverterAttribute有两个构造函数,其中一个构造函数采用参数列表(camelCaseText)。这将映射到类型的构造函数

由于StringEnumConverter's constructors中的一个为[JsonConverter(typeof(StringEnumConverter), new object[] { true })] public MarkerType MarkerType { get; set; } 获取了一个布尔值,您只需要在属性行中传递它:

AllowIntegerValues

请注意,这仅限于构造函数;无法使用StringEnumConverter语法在JsonConverterAttribute上设置camelCaseText,因为唯一的非默认构造函数只接受-dontobfuscate的参数。