c# - 使用 ServiceStack 自定义 Json Enum 序列化

标签 c# json enums servicestack jsonserializer

我正在尝试用 json 序列化枚举。 如果枚举值为“男性”和“女性”。我想要它作为“M”和“F”。 这是代码示例,它适用于 XmlSerializer,但我需要使其适用于 JsonSerializer

public enum Gender
{
    [EnumMember(Value = "M"), XMLEnum("M")]
    Male,

    [EnumMember(Value = "F"), XMLEnum("F")]
    Female
}

附注我使用 ServiceStack 作为 Json 序列化器

最佳答案

一个不错的方法是使用 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 进行了测试,它有效。

关于c# - 使用 ServiceStack 自定义 Json Enum 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26409968/

相关文章:

python - 通过空子类对对象进行分类是 Pythonic 吗?

c# - WPF UserControl 属性更改不更新

c# - ICommand异常,线程无法访问对象

java - 如何从 Enum 中的 Spring Messagesource 读取内容?

java - RESTful MySQL/术语/传递参数/返回整数和 double

php - pdo 并将 json 编码插入到 json 字段

c++ - 为枚举结构设置多个属性

c# - 只有最后一个单元格被添加到行

c# - C#-数组索引与LINQ?

java - 如何使用 JSON 映射 Java 嵌入对象