使用 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 到某些流。