枚举序列化:Json vs XML

21
我在我的项目中有以下的枚举类型:
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序列化中使用字符串。


1
你是如何进行JSON序列化的?根据你使用的序列化器,它可能有或没有将枚举值序列化为字符串的选项。 - carlosfigueira
我正在使用随 asp.net web api beta 一起提供的默认序列化程序。 - Muhammad Adeel Zahid
1
可能是将C#枚举序列化为字符串的JSON序列化的重复问题。 - moribvndvs
3个回答

36
自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);

第一行需要一个单独的; - Michael Bisbjerg

1
如果您切换到使用基于Json.NET的格式化程序(将在下一个ASP.NET Web API版本中默认安装),则可以轻松完成此操作。有关详细信息,请参见此SO帖子:
{{link1:如何全局告诉Json.Net将StringEnumConverter应用于所有枚举}}

0

要同时使用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
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接