如何使用json.net将枚举序列化为不同的属性名称

时间:2014-10-15 20:34:50

标签: c# serialization enums json.net

我有以下枚举

public enum PermissionType
{
  [JsonProperty(PropertyName = "can_fly")]
  PermissionToFly,
  [JsonProperty(PropertyName = "can_swim")]
  PermissionToSwim
};

以及具有此属性的类

[JsonProperty(PropertyName = "permissions", ItemConverterType = typeof(StringEnumConverter))]
public IList<PermissionType> PermissionKeynames { get; set; }`

我想将枚举列表序列化为字符串列表,并且序列化列表使用PropertyName中指定的字符串(例如“can_swim”)而不是属性的实际名称“PermissionToSwim”。但是,每当我调用JsonConvert.SerializeObject时,我最终都会使用

"permission_keynames":["PermissionToFly","PermissionToSwim"]

而不是我想要的

"permission_keynames":["can_fly","can_swim"]

我想在我的代码中保留短语“PermissionToSwim”,序列化为另一个单词。知道我怎么能做到这一点?我的直觉说,注释是罪魁祸首,但我找不到正确的注释。

1 个答案:

答案 0 :(得分:21)

Looks like您可以使用EnumMember attribute(在System.Runtime.Serialization中找到)来完成此工作。

public enum PermissionType
{
    [EnumMember(Value = "can_fly")]
    PermissionToFly,

    [EnumMember(Value = "can_swim")]
    PermissionToSwim
}

如果您使用这些属性,则无需在列表中的ItemConverterType属性中设置JsonProperty