使用 Serializeable class 实现复制构造函数
Implementing a Copy-Constructor with Serializeable class
我有一个 Class MyClass
实现可序列化到 XML,我用它来简单地保存数据。
现在我需要实现一个 Copy-Constructor,每个需要复制的 Field 也被序列化,所以这是实现我的解决方案的最简单方法。
这是我目前尝试过的方法
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;
}
当我使用 FileStream
时,它使用 XmlSerializer
的序列化函数确实有效,但在这种情况下,我在 Deserialize(Stream)
-Method 中得到了一个 InvalidOperationException
。
堆栈跟踪
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 微软告诉我我可以将这个 Stream 用于序列化。
告诉我我没看到的:)
之前
clone = (MyClass)ser.Deserialize(ms);
添加:
ms.Position = 0;
您还可以实施克隆功能,这样您就不需要 serialize/deserialize 一个 xml 到某些流。
我有一个 Class MyClass
实现可序列化到 XML,我用它来简单地保存数据。
现在我需要实现一个 Copy-Constructor,每个需要复制的 Field 也被序列化,所以这是实现我的解决方案的最简单方法。
这是我目前尝试过的方法
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;
}
当我使用 FileStream
时,它使用 XmlSerializer
的序列化函数确实有效,但在这种情况下,我在 Deserialize(Stream)
-Method 中得到了一个 InvalidOperationException
。
堆栈跟踪
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 微软告诉我我可以将这个 Stream 用于序列化。
告诉我我没看到的:)
之前
clone = (MyClass)ser.Deserialize(ms);
添加:
ms.Position = 0;
您还可以实施克隆功能,这样您就不需要 serialize/deserialize 一个 xml 到某些流。