我可以配置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?

我可以配置ServiceStack.Text将枚举值序列化为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();