- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 Newtonsoft 的 JsonConvert 将对象列表序列化为 JSON。我的 Marker 类包含一个枚举,我正在尝试将其序列化为驼峰式字符串。基于其他 Stackoverflow 问题,我正在尝试使用 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 docs提到一个 CamelCaseText
属性,但我不确定如何使用 JsonConverterAttribute
传递它。以下代码失败:
[JsonConverter(typeof(StringEnumConverter), new object[] { "camelCaseText" }]
如何在 JsonConverterAttribute
中为 StringEnumConverter
指定 CamelCaseText
属性?
最佳答案
JsonConverterAttribute有两个构造函数,其中一个接受参数列表 (Object[]
)。这映射到第一个参数类型的构造函数。
StringEnumConverter可以使用它的大多数非默认构造函数来处理这个问题。
The first one在 JSON.net 12+ 中已过时
The second one允许您指定 NamingStrategy类型; CamelCaseNamingStrategy做的伎俩。实际上,所提供的六个构造函数中的三个都是如此。
备注:one other constructor打破常规,要求 NamingStrategy 实例而不是类型。
看起来像这样:
[JsonConverter(typeof(StringEnumConverter), typeof(CamelCaseNamingStrategy))]
public MarkerType MarkerType { get; set; }
关于c# - 使用 StringEnumConverter 将枚举值序列化为驼峰式字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37795279/
如 this question适用于“大型”Visual Studio 和 Resharper,我也希望在 VS Code 中看到该功能。 滚动浏览 shortcut list对于 VS Code,我
我是一名优秀的程序员,十分优秀!