2012-03-05 60 views
4

我正在查看JSON.NET和ServiceStack.Text以将POCO对象序列化为JSON。 JSON.NET似乎非常灵活,但性能成本有点低。 ServiceStack.Text似乎提供几乎所有我需要的更好的性能。这确实是ServiceStack显得缺乏的只有一件事......我可以配置ServiceStack.Text以将枚举值序列化为camelCase吗?

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

public enum PersonStatus 
    { 
     ActiveAgent, 
     InactiveAgent 
    } 

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

如果我设置ServiceStack配置序列化使用驼峰使用以下代码:

ServiceStack.Text.JsConfig.EmitCamelCaseNames = true; 

我最终状态属性序列如下:

状态:活性试剂

注意,属性名是骆驼,但枚举值是PascalCase。

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

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

回答

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(); 
+0

感谢您的快速反应!结束了由于我无法控制的其他原因而去JSON.NET,但我喜欢ServiceStack.Text的简易性和性能。 – 2012-03-06 20:32:52

+0

@mythz你知道是否有方法来实例化JsonSerializer并将配置应用于该实例吗? – 2017-01-27 14:12:42

相关问题