4

我正在查看 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; }
    }

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

ServiceStack.Text.JsConfig.EmitCamelCaseNames = true;

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

状态:ActiveAgent

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

无论我使用 ServiceStack.TextJsonSerializer还是TypeSerializer.

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

4

1 回答 1

12

不,该值在 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();
于 2012-03-06T06:32:04.530 回答