枚举序列化 Json 与 XML



我的项目中有以下枚举

public enum CameraAccessMethod
{
    Manual = 0,
    Panasonic = 1,
    Axis = 2,
    AirCam = 3
}

我有一个根据不同场景序列化为 json 或 XML 的对象,并且对象的属性之一为 CameraAccessMethod 类型。我遇到的问题是,当此属性序列化为 XML 时,它将提供枚举值(手动、松下、轴、空气摄像头(的字符串表示形式,但在 JSON 中它被序列化为数字值 (0,1,2,3(。如何避免这种不一致?我也想要 JSON 序列化中的字符串。

自 Web API RC 以来,您可以通过在Application_Start()期间将StringEnumConvert应用于现有的 JsonMediaTypeFormatter 转换器集合来获取枚举的字符串表示形式:

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

如果您切换到使用基于 Json.NET 的格式化程序,则可以轻松完成此操作(格式化程序将在下一滴 Web API 中开箱即用 ASP.NET(。 有关详细信息,请参阅此SO帖子:

如何告诉全局 Json.Net 将字符串枚举转换器应用于所有枚举

要使用JsonMediaTypeFormatterenumConverter两者,我们可以使用以下代码。代码从这里开始

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
});

最新更新