gpt4 book ai didi

c# - 使用 ServiceStack 的自定义 Json 枚举序列化

转载 作者:太空宇宙 更新时间:2023-11-03 10:38:37 25 4
gpt4 key购买 nike

我正在尝试在 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 包,它允许您使用现有的枚举成员属性。这是使其工作的代码:

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 枚举序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26409968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com