假設在C#中的標誌枚舉:你怎麼能讓一個標誌枚舉在C#中以數值方式序列化它的組合值?
[Flags]
public enum FlagsEnum
{
One = 0x1,
Two = 0x2,
Four = 0x4,
...
}
如果您通過標準的JSON或XML序列化運行此,FlagsEnum.One
將被序列化爲字符串One
,FlagsEnum.Two
爲Two
等,如果你想改變它要將值序列化爲整數1
,2
等,枚舉的一般解決方案通常是使用EnumMember
屬性或XmlEnum
屬性。
問題是,使用一個標誌枚舉,你期望使用的幾個數值不是專門聲明的。谷歌搜索似乎並沒有爲這種情況提供很多解決方案。那麼你如何得到像這樣的東西被序列化爲不僅僅是2的冪的整數值,而是以序列化形式顯示的東西,如23
,15
等等。
編輯
部分就是我正在尋找的是在枚舉本身內指定這個,不會增加任何枚舉值額外的屬性或其他類型的一種方式。然而,在我的腦海裏有一個問題,這是否實際上是可能的(基本上來說)。
此外,目前真正想出的串行器的主要類型是DataContractSerializer
。然而,典型的標準JSON內容也適用於這個問題,目標是避免更改序列化程序本身以及使用任何客戶或離線路徑。 (屬性和東西將是一件好事,如果能夠做到這一點的方式)
唯一可能的方式做到這一點因爲沒有額外的屬性枚舉的一部分等是否附着某種暗示系列化屬性的財產,或設置爲串行一些配置。這取決於你使用的序列化器(例如'DataContractJsonSerializer'和Json.Net'JsonSerializer')。你在做什麼序列化? – Rhumborl
您可能正試圖解決您不需要解決的問題。只要你的枚舉標有'[Flags]','XmlSerializer'和Json.NET都會正確串行化位掩碼值。請參閱https:// dotnetfiddle。net/SBSPWY,它表明生成的XML將是' One Two Four ',JSON將會是''一,二,四''。 –
dbc
@dbc是完全正確的,只需再次檢查序列化 – ASpirin