枚举序列化 Json 与 XML
Posted
技术标签:
【中文标题】枚举序列化 Json 与 XML【英文标题】:Enum Serialization Json vs XML 【发布时间】:2012-05-26 17:13:29 【问题描述】:我的项目中有以下 Enum
public enum CameraAccessMethod
Manual = 0,
Panasonic = 1,
Axis = 2,
AirCam = 3
我有一个对象,它根据不同的场景被序列化为 json 或 XML,并且对象的属性之一是 CameraAccessMethod
类型。我遇到的问题是,当这个属性被序列化为 XML 时,它将给出枚举值(手动、松下、轴、Aircam)的字符串表示,但在 JSON 中它被序列化为数字值(0、1、2、3)。我怎样才能避免这种不一致?我也想要 JSON 序列化中的字符串。
【问题讨论】:
你是如何进行 JSON 序列化的?根据您使用的序列化程序,它可能有也可能没有将枚举值序列化为字符串的选项。 我正在使用 asp.net web api beta 附带的默认序列化程序 JSON serialization of c# enum as string的可能重复 【参考方案1】:如果您切换到使用基于 Json.NET 的格式化程序(它将随下一个 ASP.NET Web API 提供开箱即用),您可以轻松完成此操作。有关详细信息,请参阅此 SO 帖子:
How to tell Json.Net globally to apply the StringEnumConverter to all enums
【讨论】:
【参考方案2】:由于 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);
【讨论】:
第 1 行末尾需要一个;
【参考方案3】:
要同时使用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
);
【讨论】:
以上是关于枚举序列化 Json 与 XML的主要内容,如果未能解决你的问题,请参考以下文章