我可以配置ServiceStack.Text将枚举值序列化为camelCase吗
本文关键字:序列化 camelCase 枚举 配置 ServiceStack Text 我可以 | 更新日期: 2023-09-27 18:27:01
我正在研究将POCO对象序列化为JSON的JSON.NET和ServiceStack.Text。JSON.NET看起来非常灵活,但也有一定的性能成本。文本似乎以更好的性能提供了我所需要的几乎所有内容。实际上,ServiceStack似乎只缺少一件事。。。
如果我有一个包含枚举属性的对象,那么说一个枚举,如下所示。。。
public enum PersonStatus
{
ActiveAgent,
InactiveAgent
}
public class Person
{
//A bunch of other properties
public PersonStatus Status { get; set; }
}
如果我使用以下代码将ServiceStack配置设置为使用camelCase进行序列化:
ServiceStack.Text.JsConfig.EmitCamelCaseNames = true;
最后,我得到了如下序列化的Status属性:
状态:ActiveAgent
请注意,属性名称为camel大小写,但枚举值为PascalCase。
无论我使用ServiceStack.Text的JsonSerializer
还是TypeSerializer
,这种行为似乎都是一致的。
ServiceStack中是否有一种简单的方法可以更改此行为,使值也为camelCase?
否,该值在JSON和JSV序列化程序中都是字符串文字,并且序列化程序中没有将实际值更改为使用camelCase或任何其他修饰符的选项。
要做到这一点,唯一的方法是在不实际重命名枚举以具有camelCase值的情况下,为枚举指定一个自定义序列化函数。默认情况下,ServiceStack.Text不会为自定义序列化fn发出默认值,因此您需要添加PersonStatus.None值(不会发出),或者设置JsConfig.IncludeNullValues = true
以获取ServiceStack.Text以发出默认值。
所有这些看起来像:
JsConfig.EmitCamelCaseNames = true;
JsConfig.IncludeNullValues = true;
JsConfig<PersonStatus>.SerializeFn = text => text.ToString().ToCamelCase();