21

我的项目中有以下枚举

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

我有一个对象,它根据不同的场景被序列化为 json 或 XML,并且对象的属性之一是 type CameraAccessMethod。我遇到的问题是,当此属性被序列化为 XML 时,它将给出枚举值(手动、松下、Axis、Aircam)的字符串表示,但在 JSON 中它被序列化为数值(0、1、2、3)。我怎样才能避免这种不一致?我也想要 JSON 序列化中的字符串。

4

3 回答 3

36

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

var jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
var enumConverter = new Newtonsoft.Json.Converters.StringEnumConverter();
jsonFormatter.SerializerSettings.Converters.Add(enumConverter);
于 2012-06-26T12:12:44.987 回答
1

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

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

于 2012-05-22T05:41:19.123 回答
0

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

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
});
于 2013-06-24T04:23:56.413 回答