2012-01-04 13 views
3

我可以使用[XmlIgnore]爲了不寫入元素,但是如何根據變量的內容來控制它呢?如何不寫基於XmlSerializer的值的元素?

例如,當值爲空時,我不想寫入XML元素。

[XmlRootAttribute("Component", IsNullable = true)] 
public class Component { 
    [XmlArrayAttribute("worlds_wola", IsNullable = true)] 
    public List<Hello> worlds;  
    public int? a = null; 
    public int? b = null; 

    public Component() 
    { 
     worlds = new List<Hello>() {new Hello(), new Hello()}; 
    } 
} 

但是,我得到了這個XML。

<worlds_wola> 
    ... 
</worlds_wola> 
<a xsi:nil="true" /> 
<b xsi:nil="true" /> 

有什麼辦法沒有拿到好好嘗試一下有什麼價值,例如「<a/>」或「<b/>」的元素?

+0

所以,你想要什麼XML? – 2012-01-04 17:05:30

+0

@Austin:我想要一個沒有''和''的XML,因爲它們沒有賦值。 – prosseek 2012-01-04 17:07:55

+1

[Serialize an nullable int]可能的重複(http://stackoverflow.com/questions/244953/serialize-a-nullable-int) – 2012-01-04 17:10:59

回答

1

顯然XmlSerializer的支持ShouldSerialize方法:

您還可以將定製序列化代碼與IXmlSerializable或ISerializable一起使用。

對於小班,這是很容易的,但它可以迅速變得混亂和脆弱的較大的案件。

您可能還可以使用XmlSerializer的構造函數屬性重寫根據您的情況: