2013-11-14 51 views
0

我需要反序列化/序列化XML,看起來像這樣:序列化/反序列化的枚舉爲元素的名稱(而不是元素含量/值)

<color> 
    <green/> 
</color> 

其中<green/>可能<red/><blue/>等 - 非常大(但有限)集。

我想將其描述爲簡單枚舉在我的代碼:

enum ColorName 
{ 
    [XmlEnum("red")] 
    Red, 
    [XmlEnum("green")] 
    Green, 
    [XmlEnum("blue")] 
    Blue, 

    ... 
    etc. 
} 

但是,如果我寫我的對象模型是這樣的:

class Color 
{ 
    [XmlElement("name")] 
    public ColorName ColorName; 
} 

class Something 
{ 
    [XmlElement("color")] 
    public Color Color; 
} 

枚舉進入XML作爲一種價值,而不是元素名稱:

<color> 
    <name>green</name> 
</color> 

有沒有什麼辦法讓寫進XML枚舉值元素名稱(請參閱第一個XML片段 - 這是目標),而不是XML元素值,而不必重新鍵入所有值(它是一個非常大的集合)作爲空類名稱,或訴諸自定義序列化喜歡避免它,因爲序列化的類包含很多其他成員,默認情況下它們是完美序列化的)?

(我無法更改架構,它是第三方)。

回答

0

不,不支持簡單地使用[Xml*]屬性對您的類進行裝飾。你必須在Something上實施IXmlSerializable並自己動手。請注意,在大多數情況下,您不必打擾GetSchema方法;實施ReadXmlWriteXml就好了。