2010-12-08 184 views

回答

13

你可以創建一個名爲MyPropertySpecified的附加屬性,它返回一個布爾值。
當此屬性返回true時,MyProperty屬性將被序列化。當它返回false時,它不會被序列化。

此外,你想裝飾該屬性與XmlIgnoreAttribute,以便這個特定的屬性不序列化。

例子:

public class Person 
{ 
    public string Name 
    { 
     get; 
     set; 
    } 

    [XmlIgnore] 
    public bool NameSpecified 
    { 
     get { return Name != "secret"; } 
    } 
} 
+0

我想你誤解了這個問題。 OP想要輸出屬性(包含在xml中)。 – 2010-12-08 10:29:29

0

您可以使用OnSerializingAttribute序列化時允許我們在序列化之前調用方法。你可以得到更多關於它的信息here

+0

這是否適用於xml序列化? – 2010-12-08 10:26:01

+0

除此之外,如果特定屬性是值類型,他會怎麼做?據我所知,在串行化過程中,OnSerializing可以用來設置值等,它不會改變屬性將被序列化。我假設你期望空值不會被序列化,但是在值類型的情況下,屬性中會有一個值,因此需要額外的工作來獲得OP想要的行爲,methinks。 – Anton 2010-12-08 11:35:00

0

恕我直言,你需要實現的類IXmlSerializable的和實施這樣一種方式,他們只寫根據條件您指定的屬性,並能處理閱讀中WriteXML和的ReadXml方法有或沒有特定屬性出現在反序列化中。

IXmlSerializable at Msdn

4

雖然作品,是一個相當短的解決方案,propertyNameSpecified模式在我看來,有一些缺點(污染類的接口;依靠屬性名稱;介紹了隱行爲)。

如果您只需要實現一個簡單條件(例如,不要序列化默認值),那麼DefaultValue屬性是一個更好的選擇。

例如:

public class PurchaseOrder 
{ 
    [DefaultValue("2002")] 
    public string Year; 
} 

如果年的值是 「2002」,它將從XML輸出被省略。