2011-01-19 46 views
4

我有一個有大約20個成員的類。我需要使用XML序列化這個類的對象。但條件是我只需要XML中的一個成員。只能序列化一個類的一個屬性

我該怎麼做。

編輯:但在某個時候,我想序列化所有的成員。所以我不能使用[XMLIgnore]屬性。

回答

1

您可以將[XmlIgnore]屬性放在不想被序列化的所有成員上。

2

添加以下的屬性對所有你不想序列化的成員,

[XmlIgnore()] 
public Type X 
{ 
get;set; 
} 
+0

請參閱編輯請 – 2011-01-19 11:42:38

0

標記其他屬性

<NonSerializable()> _ 
Property someproperty 

高端物業

1

有兩種方法可以使在.NET中使用屬性不可序列化的屬性。

如果您在二進制或SOAP序列化,你應該使用[NonSerialized]您可以設置屬性[NonSerialized][XmlIgnore]

,如果你想序列只是在XML你應該使用[XmlIgnore]

所以你的情況,答案是[XmlIgnore]

編輯: 沒有辦法動態地應用屬性的屬性。 這裏關於這裏的一些信息:Can attributes be added dynamically in C#?這裏Remove C# attribute of a property dynamically

另外,作爲一個鍛鍊你可能有不同的屬性類的不同副本。

OR

讓你的類的副本設置所有的道具爲可序列化,但填充只有你需要的屬性,這樣一來其他每一件事將是空/空和類的序列後,你應該得到你所需要的XML 。

2

你可以明確地實現IXmlSerializable接口和控制領域的自己的讀/寫,基於某些外部參數,即

class CustomXml: IXmlSerializable 
{ 
    public System.Xml.Schema.XmlSchema GetSchema() 
    { 
     // 
    } 

    public void ReadXml(System.Xml.XmlReader reader) 
    { 
     if (SerializationParameter.FullSerialization) 
      //deserialize everything 
     else 
      //deserialize one field only 
    } 

    public void WriteXml(System.Xml.XmlWriter writer) 
    { 
     if (SerializationParameter.FullSerialization) 
      //serialize everything 
     else 
      //serialize one field only 
    } 
} 

其中SerializationParameter.FullSerialization是你如何能控制的例子是什麼序列化時。

相關問題