通过属性在(反)序列化期间控制枚举值格式

时间:2013-04-23 20:28:29

标签: c# serialization json.net

问题

假设我有一个代表某事或其他内容的枚举:

public enum ResultState
{
    Found,
    Deleted,
    NotFound
}

在我的序列化json中,我希望这些值分别序列化为"found""gone""not_found"。 (注意:这是不是 camelCase,而是一个完全自定义的字符串!)

我正在使用JSON.NET

迄今为止的故事

我的一切工作几乎都是正确的 - 枚举通过StringEnumConverter全局转换为字符串,但我不能在生活中看到如何实现与上述类似的东西。

我最初的想法是将JsonProperty(...)属性应用于相关的枚举值,但这似乎不起作用!

潜在解决方案?

我能想到的唯一方法是编写自己的JsonConverter继承自StringEnumConverter,但还有一些额外的魔法来处理我创建的新JsonName属性

正如您可能想象的那样,我不喜欢这个想法。

我想知道你是不是很棒的人会建议一个更简单的选择?

1 个答案:

答案 0 :(得分:9)

碰巧,我正在思考整件事。

我使用了来自EnumMember的{​​{1}}属性,效果很好。

这是我完整性的新内容:

System.Runtime.Serialization

在调用public enum QueryResultState { [EnumMember(Value="found")] Found, [EnumMember(Value="gone")] Deleted, [EnumMember(Value="not_found")] NotFound } 时不要忘记包含StringEnumConverter,因为默认情况下JSON.NET将枚举序列化为整数:

JsonConvert.Serialize(...)