通过属性在(反)序列化期间控制枚举值格式
问题
假设我有一个表示某事或其他内容的枚举:
public enum ResultState { Found, Deleted, NotFound }
在我的序列化json中,我希望这些值分别被序列化为"found"
, "gone"
或"not_found"
。 (注意:这不是 camelCase,而是完全自定义的字符串!)
我正在使用JSON.NET
迄今为止的故事
我的一切工作都差不多 – 枚举通过StringEnumConverter
全局转换为字符串,但是我不能在生活中看到如何实现与上面类似的东西。
我最初的想法是将JsonProperty(...)
属性应用于相关的枚举值,但这似乎不起作用!
潜在解决方案
我能想到的唯一方法是编写自己的inheritance自StringEnumConverter
,但是还有一些额外的魔法可以处理我创建的新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将Enums序列化为整数:
JsonConvert.SerializeObject(someObjectWithAnEnum, new StringEnumConverter());