我可以配置ServiceStack.Text来将枚举值序列化为camelCase吗?

时间:2012-03-05 21:16:37

标签: c# json.net servicestack

我正在查看JSON.NET和ServiceStack.Text以将POCO对象序列化为JSON。 JSON.NET似乎非常灵活,但性能成本有点高。 ServiceStack.Text似乎提供了几乎所有我需要的更好的性能。 ServiceStack似乎只缺少一件事......

如果我有一个包含枚举属性的对象,请说如下的枚举...

public enum PersonStatus
    {
        ActiveAgent,
        InactiveAgent
    }

public class Person
    {
        //A bunch of other properties
        public PersonStatus Status { get; set; }
    }

如果我使用以下代码使用camelCase将ServiceStack配置设置为序列化:

ServiceStack.Text.JsConfig.EmitCamelCaseNames = true;

我最终将Status属性序列化如下:

  

状态:ActiveAgent

请注意,属性名称为驼峰式大小写,但枚举值为PascalCase。

无论我使用ServiceStack.Text的JsonSerializer还是TypeSerializer,这种行为似乎都是一致的。

ServiceStack中是否有一种简单的方法可以更改此行为,以便该值也是camelCase?

1 个答案:

答案 0 :(得分:12)

不,该值是JSON和JSV序列化程序中的字符串文字,并且序列化程序中没有选项可以更改实际值以使用camelCase或任何其他修饰符。

实现此目的的唯一方法是不实际重命名enum以使camelCase值为枚举指定自定义序列化函数。默认情况下,ServiceStack.Text不会为自定义序列化fn发出默认值,因此您要么添加PersonStatus.None值(不会发出),要么设置JsConfig.IncludeNullValues = true以使ServiceStack.Text发出默认值值。

这一切看起来像是:

JsConfig.EmitCamelCaseNames = true;
JsConfig.IncludeNullValues = true;
JsConfig<PersonStatus>.SerializeFn = text => text.ToString().ToCamelCase();