序列化单个枚举值,尊重“EnumMember”属性

时间:2016-04-05 10:39:23

标签: c# enums data-annotations

我有以下类型:

[DataContract]
public enum Foo
{
    Unknown,
    [EnumMember(Value = "Fix")]
    Foo,
    [EnumMember(Value = "Bax")]
    Bar
}

[DataContract]
public class Baz
{
    [DataMember]
    public Foo Foo { get; set; }
}

这可以按预期工作:

var jsonSettings = new JsonSerializerSettings
{
    Converters = new List<JsonConverter> { new StringEnumConverter() }
};
var serializedBaz = JsonConvert.SerializeObject(new Baz { Foo = Foo.Foo } }, jsonSettings);

Console.WriteLine(serializedBaz);
// {"Foo":"Fix"}

然而,这并不是:

Console.WriteLine(JsonConvert.SerializeObject(Foo.Foo, jsonSettings);
// "Fix"

换句话说,当单独序列化枚举值时,我得到引号作为值的一部分。如果我使用ToString(),则会使用枚举值的名称,而不是[EnumMember]中指定的值,即Foo而不是Fix。有没有办法获得FixFoo"Fix"),而无需编写我自己的扩展方法?

0 个答案:

没有答案