【问题标题】:Is there a way to deep copy non serializable object? [duplicate]有没有办法深度复制不可序列化的对象? [复制]
【发布时间】:2017-05-31 08:06:44
【问题描述】:

我必须将一个 Arraylist 复制到一个新的 Arraylist。在旧的 Arraylist 中有多个元素在运行时发生变化。其中之一是 Arraylist 中的模块设置参数。我想深度复制数组列表的值,以便可以将其用于撤消操作。我尝试使用 Binaryformater 和 Datacontract。对于不可序列化的对象,两者都不能完成。有人可以帮忙吗?

【问题讨论】:

    标签: c# deep-copy


    【解决方案1】:

    如果没有更多信息,很难确切地说出了什么问题,但 ArrayList 本身是可序列化的。但是,如果您使用的是自定义对象,则需要将其标记为可序列化才能使序列化工作。见:Serialize ArrayList of Objects

    【讨论】:

    • 似乎我必须将 Arraylist 中的单个类设置为可序列化的。感谢您的输入:)
    【解决方案2】:

    使用内存流和二进制格式化程序 像

    `public T Clone<T> (T obj)
    .   {
    .       using(var ms = new MemoryStream())
    .       {
    .          var formatter = new BinaryFormatter();
            formatter.Serialize(stream, obj);
            stream.Position =0;
            return (T)formatter.Deserialize(stream);
         }
    .    }’
    

    希望对你有帮助

    【讨论】:

    • 我已经试过上面的代码了。我必须将我的应用程序下的所有类都转换为可序列化的才能实现。 :)
    猜你喜欢
    • 2019-12-26
    • 1970-01-01
    • 2013-02-28
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2016-04-28
    相关资源
    最近更新 更多