一個不錯的方法是使用ServiceStack配置對象的SerializeFn
例程,併爲Gender枚舉配置自定義序列化。
var person = new Person()
{
FullName = "John Johnson",
Gender = Gender.Male
};
JsConfig<Gender>.SerializeFn = c =>
c.Equals(Gender.Male) ? "M" : "F";
var result = person.ToJson(); // {"FullName":"John Johnson","Gender":"M"}
更新:既然我們確定你不能你ServiceStack.Text庫升級到4+,你一定想利用現有的enummember屬性,這裏是完全跳過SerializeFn辦法解決。
您可以安裝一個名爲ServiceStack.Text.EnumMemberSerializer
的附加nuget包,它允許您使用現有的enummember屬性。這裏是代碼,使其工作:
new EnumSerializerConfigurator()
.WithEnumTypes(new Type[] { typeof(Gender) })
.Configure();
JsConfig.Reset();
var result = JsonSerializer.SerializeToString(person); // {"FullName":"John Johnson","Gender":"M"}
我已經測試ServiceStack.Text 3.9,它的工作。
感謝您的回覆。我嘗試了同樣的事情,但似乎沒有爲我工作。 – Krushal 2014-10-16 18:09:50
你能用你用來序列化枚舉的確切代碼更新問題嗎?此外,您還可以指定ServiceStack庫的版本,因爲這也可能是一個問題。 – 2014-10-16 18:14:01
它仍然給我「男」而不是「M」。我正在使用產品版本:3.9.59.0 – Krushal 2014-10-16 18:20:48