枚举序列化 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】:

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

【讨论】:

以上是关于枚举序列化 Json 与 XML的主要内容,如果未能解决你的问题,请参考以下文章

C# xml可序列化多值枚举

使用 ServiceStack 自定义 Json 枚举序列化

unity含枚举类型json数据的序列化和反序列化

unity含枚举类型json数据的序列化和反序列化

使用枚举数组反序列化 json

枚举类型的 JSON 反序列化