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

问题

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

public enum ResultState { Found, Deleted, NotFound } 

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

我正在使用JSON.NET

迄今为止的故事

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

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

潜在解决方案

我能想到的唯一方法是编写自己的inheritance自StringEnumConverter ,但是还有一些额外的魔法可以处理我创建的新JsonName属性。

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

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

碰巧的是,我正在过度思考整件事。

我使用了System.Runtime.SerializationEnumMember属性,效果很好。

这是我完整性的新枚举:

 public enum QueryResultState { [EnumMember(Value="found")] Found, [EnumMember(Value="gone")] Deleted, [EnumMember(Value="not_found")] NotFound } 

在调用JsonConvert.Serialize(...)时不要忘记包含StringEnumConverter ,因为默认情况下JSON.NET将Enums序列化为整数:

 JsonConvert.SerializeObject(someObjectWithAnEnum, new StringEnumConverter());