如何使用字符串值序列化枚举列表

Hoo*_*ini 1 c# serialization json.net

这是我的enum类型:

public enum AccessScope
{
    [JsonProperty("read_content")]
    ReadContent,

    [JsonProperty("write_content")]
    WriteContent,

    [JsonProperty("read_themes")]
    ReadThemes,

    [JsonProperty("write_themes")]
    WriteThemes
}  
Run Code Online (Sandbox Code Playgroud)

我想enum使用字符串值对其进行序列化......当我尝试以下代码时,数值用于序列化:

[TestMethod]
public void Serialize_access_scopes()
{
    var requiredPermissions = new List<AccessScope>()
    {
        AccessScope.ReadContent,
        AccessScope.WriteContent,
    };

    var commaSeparatedPermissions = JsonConvert.SerializeObject(requiredPermissions);  

    commaSeparatedPermissions.Should().Be("read_content, write_content");
}
Run Code Online (Sandbox Code Playgroud)

艾尔齐

Anu*_*wan 6

您可以使用StringEnumConverterJson.Net 提供的 而不是定义自定义转换器,以及使用EnumMemberAttribute代替JsonPropertyAttribute.

例如,

[JsonConverter(typeof(StringEnumConverter))]
public enum AccessScope
{
    [EnumMember(Value="read_content")]
    ReadContent,

    [EnumMember(Value="write_content")]
    WriteContent,

    [EnumMember(Value="read_themes")]
    ReadThemes,

    [EnumMember(Value="write_themes")]
    WriteThemes
} 
Run Code Online (Sandbox Code Playgroud)

现在你可以反序列化为

var requiredPermissions = new List<AccessScope>()
{
    AccessScope.ReadContent,
    AccessScope.WriteContent,
};

var result = JsonConvert.SerializeObject(requiredPermissions);
Run Code Online (Sandbox Code Playgroud)

输出

["read_content","write_content"]
Run Code Online (Sandbox Code Playgroud)