使用Serializable类实现Copy-Constructor

时间:2015-04-20 12:58:30

标签: c# serialization xml-serialization

我有一个类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进行序列化。

告诉我我没看到的内容:)

1 个答案:

答案 0 :(得分:2)

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

添加:

ms.Position = 0;

您还可以实现克隆功能,这样您就不需要将xml序列化/反序列化为某个流。