我有一个类MyClass
,它实现了Serializeable to 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;
}
使用XmlSerializer
的序列化功能在使用FileStream
时确实有用,但在这种情况下,我在InvalidOperationException
- 方法中获得Deserialize(Stream)
。
堆栈跟踪
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 microsoft告诉我,我可以使用这个Stream进行序列化。
告诉我我没看到的内容:)
答案 0 :(得分:2)
在
clone = (MyClass)ser.Deserialize(ms);
添加:
ms.Position = 0;
您还可以实现克隆功能,这样您就不需要将xml序列化/反序列化为某个流。