一个不错的方法是使用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