加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 克隆没有序列化的对象

发布时间:2020-12-15 04:21:52 所属栏目:百科 来源:网络整理
导读:我在SO处找到了许多解决方案,而且是通过序列化/反序列化(进入内存和后退)来处理对象的深层克隆. 它要求克隆的类标有[Serializable].我碰巧有我的类(其中大部分)标有[DataContract],因为我使用DataContractSerializer序列化为XML. 我只引入了[Serializable]属
我在SO处找到了许多解决方案,而且是通过序列化/反序列化(进入内存和后退)来处理对象的深层克隆.

它要求克隆的类标有[Serializable].我碰巧有我的类(其中大部分)标有[DataContract],因为我使用DataContractSerializer序列化为XML.

我只引入了[Serializable]属性,因为需要深度克隆其中一些类实例.但是,现在通过DCS进行序列化/反序列化的事情发生了,因为它不再起作用了 – 关于在反序列化时期望不同的XML元素的错误.如果我删除[Serializable],错误就消失了.

我有什么选择?我只想尽可能简单地深入克隆我的对象.

解决方法

这有效
public static T DeepClone<T>(this T a)
    {
        using (MemoryStream stream = new MemoryStream())
        {
            DataContractSerializer dcs = new DataContractSerializer(typeof(T));
            dcs.WriteObject(stream,a);
            stream.Position = 0;
            return (T)dcs.ReadObject(stream);
        }
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读