问题
假设我有一个代表某事或其他的枚举:
public enum ResultState
{
Found,
Deleted,
NotFound
}
在我的序列化 json 中,我希望将这些值序列化为 "found"
、"gone"
或 "not_found"
分别。 (注意:这不是驼峰式,而是一个完全自定义的字符串!)
我正在使用 JSON.NET
到目前为止的故事
我的一切工作几乎都正常 - 枚举通过 StringEnumConverter
全局转换为字符串,但是我无法在我的生活中看到如何实现与上述类似的东西。
我最初的想法是将 JsonProperty(...)
属性应用于相关的枚举值,但这似乎不起作用!
可能的解决方案?
我能想到的完成这项工作的唯一方法是编写我自己的继承自 StringEnumConverter
的 JsonConverter
,但使用一些额外的魔法来处理新的 JsonName
我要创建的属性。
如您所想,我不喜欢这个想法。
我想知道你们这些优秀的人是否可以提出一个更简单的替代方案?
最佳答案
碰巧的是,我对整件事想得太多了。
我使用了 System.Runtime.Serialization
中的 EnumMember
属性,效果很好。
为了完整性,这是我的新枚举:
public enum QueryResultState
{
[EnumMember(Value="found")]
Found,
[EnumMember(Value="gone")]
Deleted,
[EnumMember(Value="not_found")]
NotFound
}
调用 JsonConvert.Serialize(...)
时不要忘记包含 StringEnumConverter
,因为 JSON.NET 默认将枚举序列化为整数:
JsonConvert.SerializeObject(someObjectWithAnEnum, new StringEnumConverter());
关于c# - 通过属性在(反)序列化期间控制枚举值格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16178593/