簡體   English   中英

枚舉序列化 Json 與 XML

[英]Enum Serialization Json vs XML

我的項目中有以下枚舉

public enum CameraAccessMethod
{
    Manual = 0,
    Panasonic = 1,
    Axis = 2,
    AirCam = 3
}

我有一個對象,它根據不同的場景被序列化為 json 或 XML,並且對象的屬性之一是CameraAccessMethod類型。 我遇到的問題是,當此屬性被序列化為 XML 時,它將給出枚舉值(手動、松下、Axis、Aircam)的字符串表示,但在 JSON 中它被序列化為數值(0、1、2、3)。 我怎樣才能避免這種不一致? 我也想要 JSON 序列化中的字符串。

由於 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);

如果您切換到使用基於 Json.NET 的格式化程序(它將與下一個 ASP.NET Web API 一起提供開箱即用),您可以輕松完成此操作。 有關詳細信息,請參閱此 SO 帖子:

如何全局告訴 Json.Net 將 StringEnumConverter 應用於所有枚舉

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM