我在我的项目中有以下枚举
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序列化中的字符串。
发布于 2012-06-26 20:12:45
由于Web API RC,您可以通过在Application_Start()
期间对现有的JsonMediaTypeFormatter
转换器集合应用StringEnumConvert
来获取枚举的字符串表示形式
var jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
var enumConverter = new Newtonsoft.Json.Converters.StringEnumConverter();
jsonFormatter.SerializerSettings.Converters.Add(enumConverter);
发布于 2012-05-22 13:41:19
如果您切换到使用基于Json.NET的格式化程序(将随next drop of ASP.NET Web API一起提供),则可以很容易地实现这一点。有关详细信息,请参阅这篇文章:
How to tell Json.Net globally to apply the StringEnumConverter to all enums
发布于 2013-06-24 12:23:56
要同时使用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
});
https://stackoverflow.com/questions/10664314
复制相似问题