3

问题

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

public enum ResultState
{
    Found,
    Deleted,
    NotFound
}

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

我正在使用 JSON.NET

迄今为止的故事

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

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

潜在的解决方案?

我能想到完成这项工作的唯一方法是编写我自己的JsonConverter继承自StringEnumConverter,但使用一些额外的魔法来处理JsonName我要创建的新属性。

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

我想知道你们这些优秀的人是否可以提出一个更简单的替代方案?

4

1 回答 1

10

碰巧的是,我把整个事情想多了。

我利用了EnumMemberfrom 的属性System.Runtime.Serialization,效果很好。

这是我的完整性新枚举:

public enum QueryResultState
{
    [EnumMember(Value="found")]
    Found,

    [EnumMember(Value="gone")]
    Deleted,

    [EnumMember(Value="not_found")]
    NotFound
}

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

JsonConvert.SerializeObject(someObjectWithAnEnum, new StringEnumConverter());
于 2013-04-23T20:37:40.433 回答