2015-04-20 26 views
0

我有一個類MyClass其實現是可序列化爲XML,我用它來簡單地持久化數據。使用可序列化類實現複製構造器類

現在我需要實現一個Copy-Constructor,並且需要複製的每個Field也都是序列化的,所以它將是實現我的解決方案的最簡單方法。

這是我一直使用FileStream但在這種情況下,我得到的Deserialize(Stream) - 方法的InvalidOperationException時,即時通訊使用XmlSerializer不工作的系列化Funcions到目前爲止已經試過

static public MyClass Clone(MyClass MyClass) 
    { 
     MyClass clone; 
     XmlSerializer ser = new XmlSerializer(typeof(MyClass), _xmlAttributeOverrides); 
     using (var ms = new MemoryStream()) 
     { 
      ser.Serialize(ms, MyClass); 
      clone = (MyClass)ser.Deserialize(ms); 
     } 
     return clone; 
    } 

它。

堆棧跟蹤

bei System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events) 
    bei System.Xml.Serialization.XmlSerializer.Deserialize(Stream stream) 
    bei Namespace.MyClass.Clone(MyClass myClass) 

我從來沒有使用之前一個MemoryStream,但here微軟告訴我,我可以用這個流與序列化。

告訴我什麼,我沒有看到:)

+0

您使用'XmlSerializer'而不是創建複製字段的任何特定原因? –

+0

@YuvalItzchakov結構非常深,需要複製的東西與序列化的東西完全相同。有足夠的性能,所以它是一個相當可行的簡短解決方案。 – LuckyLikey

+1

我假設'BinaryFormatter'會更快。研究一下。 –

回答

2

之前

clone = (MyClass)ser.Deserialize(ms); 

地址:

ms.Position = 0; 

您也實現克隆功能,讓您不必序列化/反序列化xml到某個流。

+0

謝謝你的工作。我知道有這樣做的幾種可能性。 [這裏](http://stackoverflow.com/questions/78536/deep-cloning-objects)我讀了很多關於這個。 – LuckyLikey