gpt4 book ai didi

c# - 使用 StringEnumConverter 将枚举值序列化为驼峰式字符串

转载 作者:太空狗 更新时间:2023-10-29 20:58:23 26 4
gpt4 key购买 nike

我正在尝试使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com