2012-03-05 26 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

相關問題