通过属性(反)序列化期间的控制枚举值格式
本文关键字:控制 枚举 格式 序列化 属性 | 更新日期: 2023-09-27 18:10:39
问题
让我们假设我有一个枚举表示的东西:
public enum ResultState
{
Found,
Deleted,
NotFound
}
在我序列化的json中,我希望这些值分别序列化为"found"
, "gone"
或"not_found"
。(注意:这是不是 camelCase,而是一个完全自定义的字符串!)
我使用JSON。
到目前为止的故事
我已经让一切工作几乎正确-枚举通过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());