关于.net:Enum Serialization Json vs XML

Enum Serialization Json vs XML

我的项目中有以下枚举

1
2
3
4
5
6
7
public enum CameraAccessMethod
{
    Manual = 0,
    Panasonic = 1,
    Axis = 2,
    AirCam = 3
}

我有一个对象,它根据不同的场景被序列化为JSON或XML,对象的一个属性是CameraAccessMethod类型。我的问题是,当这个属性被序列化为XML时,它将给出枚举值的字符串表示(manual、panasonic、axis、aircam),但在JSON中,它被序列化为数值(0、1、2、3)。我怎样才能避免这种不一致呢?我也需要JSON序列化中的字符串。


由于web api rc,您可以通过在Application_Start()期间对现有JsonMediaTypeFormatter转换器集合应用StringEnumConvert来获取枚举的字符串表示:

1
2
3
var jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
var enumConverter = new Newtonsoft.Json.Converters.StringEnumConverter();
jsonFormatter.SerializerSettings.Converters.Add(enumConverter);


如果您切换到使用基于json.net的格式化程序(它将随下一个ASP.NET Web API一起发布),您可以很容易地实现这一点。有关详细信息,请参阅此SO文章:

如何全局告诉json.net将StringEnumConverter应用于所有枚举


要使用JsonMediaTypeFormatterenumConverter,我们可以使用下面的代码。//代码从这里开始

1
2
3
4
5
6
7
8
9
var serializerSettings = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
var enumConverter = new Newtonsoft.Json.Converters.StringEnumConverter();
serializerSettings.Converters.Add(enumConverter);
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new PartialJsonMediaTypeFormatter()
{
     IgnoreCase = true,
     SerializerSettings = serializerSettings
});