我正在尝试在json中序列化枚举。 如果枚举值是“男性”和“女性”。我希望它为“M”和“F”。 这是代码示例,它适用于XmlSerializer,但我需要使它适用于JsonSerializer
public enum Gender
{
[EnumMember(Value = "M"), XMLEnum("M")]
Male,
[EnumMember(Value = "F"), XMLEnum("F")]
Female
}
P.S。我正在使用ServiceStack作为Json Serializer
答案 0 :(得分:2)
一个不错的方法是使用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测试过它。