2012-02-24 145 views
8

我應該如何標記屬性,他們不應該序列化,如果他們有默認值?例如,如果我有布爾值,它應該被序列化,如果只設置爲true,與可爲空值相同,如果它們爲空,我不想將它們包含在我的序列化文件中。如何避免序列化默認值?

+0

這是什麼目的! – 2012-02-24 11:04:57

+0

有較小的序列化文件因爲我需要發送它有時thrue gprs網絡我需要爲交通支付,無論如何在恢復(反序列化)期間,如果它們不存在,它們將被設置爲默認值,所以如何避免序列化它們? – kosnkov 2012-02-24 11:07:06

+0

我認爲你要麼編寫自己的序列化程序,要麼用自己的規則後處理內置序列化程序的結果。 – 2012-02-24 11:08:39

回答

22

好吧,我自己找到了。它是[DefaultValue(false)]。如果我用這個屬性標記一些屬性,那麼只有當它和()中的值不同時纔會被序列化。

System.ComponentModel.DefaultValueAttribute

+0

感謝您的解決方案!任何想法如何避免,我必須把默認值兩次? '[DefaultValue(「Status」)] public string statusTag =「Status」;' – pfuhlert 2017-10-25 13:39:36

4

有指定的屬性這樣的東西。我找不到msdn文檔,但this article應該會有所幫助。 基本上你必須這樣寫:

//this property would not be serialized if it contains String.Empty value 
public string PropertyName { get; set; } 


[XmlIgnore] 
public bool PropertyNameSpecified 
{ 
    get { return PropertyName != String.Empty; } 
} 
+0

get {return PropertyName!= String.Empty; } 那是什麼?你將bool與字符串進行比較,當我添加xmlIgnore時,它永遠不會出現在序列化文件中,即使這個屬性不爲空或者在bool的情況下爲true。 – kosnkov 2012-02-24 12:34:28

+0

我編輯了我的答案。希望這給你正確的理解那裏發生的事情。 – 2012-02-24 13:18:03