【问题标题】:Enum Serialization Json vs XML枚举序列化 Json 与 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 附带的默认序列化程序

标签: .net xml json serialization asp.net-web-api


【解决方案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
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多