Ste*_*ard 4 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; }
}
Run Code Online (Sandbox Code Playgroud)
如果我使用以下代码使用camelCase将ServiceStack配置设置为序列化:
ServiceStack.Text.JsConfig.EmitCamelCaseNames = true;
Run Code Online (Sandbox Code Playgroud)
我最终将Status属性序列化如下:
status:ActiveAgent
请注意,属性名称是camel case,但枚举值是PascalCase.
无论我使用ServiceStack.Text JsonSerializer
还是,这种行为似乎都是一致的TypeSerializer
.
在ServiceStack中是否有一种简单的方法来改变这种行为,以便值也是camelCase?
myt*_*thz 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();
Run Code Online (Sandbox Code Playgroud)