我有以下类型:
[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
。有没有办法获得Fix
(Foo
和"Fix"
),而无需编写我自己的扩展方法?