我正在查看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?
答案 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();