有关序列化实现引用对象深度复制的几种方法 !
来源:互联网 发布:绝对萌域淘宝 编辑:程序博客网 时间:2024/05/18 12:29
对于一般情况而言,为了解决引用类型的值对象复制可以巧妙的使用序列化来实现,但是如果牵扯的成员中有一些诸如画刷等系统程序集里的未加序列化特性标识的对象,就很难解决 !
//集合深度复制
public object Clone(object myItem)
{
using(MemoryStream stream = new MemoryStream())
{
object CloneObj=null;
//二进制序列化
BinaryFormatter Formatter = new BinaryFormatter(null, new StreamingContext
(StreamingContextStates.Clone));
Formatter.Serialize(stream, myItem);
stream.Position = 0;
CloneObj = Formatter.Deserialize(stream);
//Xml序列化
XmlSerializer xml = new XmlSerializer(myItem.GetType());
xml.Serialize(stream, myItem);
stream.Position = 0;
CloneObj = xml.Deserialize(stream);
//Byte[] 序列化
XmlSerializer xml = new XmlSerializer(myItem.GetType());
CloneObj = DeserializeObject(SerializeObject(myItem));
stream.Close();
return CloneObj;
}
}
/// <summary>
/// 把对象序列化并返回相应的字节
/// </summary>
/// <param name="pObj">需要序列化的对象</param>
/// <returns>byte[]</returns>
public byte[] SerializeObject(object pObj)
{
if (pObj == null)return null;
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, pObj);
stream.Position = 0;
byte[] read = new byte[stream.Length];
stream.Read(read, 0, read.Length);
stream.Close();
return read;
}
}
/// <summary>
/// 把字节反序列化成相应的对象
/// </summary>
/// <param name="pBytes">字节流</param>
/// <returns>object</returns>
public object DeserializeObject(byte[] pBytes)
{
if (pBytes == null) return null;
object Obj = null;
using (MemoryStream stream = new MemoryStream(pBytes))
{
stream.Position = 0;
BinaryFormatter formatter = new BinaryFormatter();
Obj = formatter.Deserialize(stream);
stream.Close();
}
return Obj;
}
- 有关序列化实现引用对象深度复制的几种方法 !
- js实现引用对象的深度复制
- Java 基础数据类型 和 深度克隆对象的2种方法(实现Cloneable接口或者实现对象序列化)
- Ruby中复制对象的几种方法
- 序列化---对象引用的序列化
- 关于Java对象复制(Clone、深度Clone以及序列化与反序列化的使用)
- 对象的深度复制
- 对象的深度复制
- Java对象深度复制方法
- JAVA 对象深度复制实现
- JS 实现对象深度复制
- C#复制和深度复制的实现方法
- jquery jqueryeasyui共同使用对象深度复制的方法
- 使用对象输入输出流(ObjectOutputStream,ObjectInputStream)实现序列化对象的深度克隆
- 对象序列化的几种方式的比较
- 关于对象的深度复制
- Java中对象的几种引用
- 几种序列化的实现方法 java自带, Writable, Avro
- 提升C++功底的最佳捷径
- SVN (subversion) 简明实用课程
- Const,Const函数,Const变量,函数后面的Const
- MIDP 2.1的新特征
- 计算机经典笔试题1
- 有关序列化实现引用对象深度复制的几种方法 !
- 论语别裁
- 图片镂空算法集合
- CString与Byte数组的相互转化
- MIDP3.0新增特性
- 关于C语言中return的一些总结
- MTK fancy UI
- 32位的虚拟地址翻释成32位的物理地址
- 计算机经典笔试题2