2012-03-12 25 views
8

我有一個相當大的類來序列化爲Xml,並且爲了減少浪費的空間想選擇性的XmlIgnore的一些類屬性。例如,在所述類中的一個屬性被分配一個值只有一個的十倍左右,如果我的代碼序列化屬性如下可以使用XmlAttributes來選擇性地使用XmlIgnore嗎?

[XmlAttribute] 
public String WorkClass 
{ 
    get { return _workClass; } 
    set { _workClass = value; } 
} 

如果沒有值(大部分時間),這是連載一遍又一遍爲

WorkClass="" 

是否有會忽略物業系列化如果它的值是空的選項或屬性,但不能忽視它,如果它不是空的?

回答

10

您可以爲每個你想沒有系列化

值的方法,下面的方法將返回trueWorkClass含有比一個空字符串以外的東西,如果你使用的.NET Framework 4,你可以選擇使用string.IsNullOrWhitespace(),這也將檢查空格' '

public bool ShouldSerializeWorkClass() { 
    return !string.IsNullOrEmtpy(WorkClass); 
} 

當XML序列化運行時,它會尋找這種方法的基礎上,命名約定,然後選擇是否序列化財產或沒有。

該方法的名稱應始終以ShouldSerialize開頭,然後以屬性名稱結束。那麼你只需要根據你想要的任何條件返回一個布爾值,就是否要序列化值。

+4

太棒了!這也是非直觀的恕我直言。我會期待某種類型的序列化屬性修飾符,你知道,像[XmlAttribute(IgnoreOnNullOrEmpty =「true」)]。 – Cyberherbalist 2012-03-12 18:29:27

相關問題