1 /// <summary>
2 /// 对象的深度拷贝(序列化的方式)
3 /// </summary>
4 public static class MyDeepCopy
5 {
6
7 /// <summary>
8 /// xml序列化的方式实现深拷贝
9 /// </summary>
10 /// <typeparam name="T"></typeparam>
11 /// <param name="t"></param>
12 /// <returns></returns>
13 public static T XmlDeepCopy<T>(T t)
14 {
15 //创建Xml序列化对象
16 XmlSerializer xml = new XmlSerializer(typeof(T));
17 using (MemoryStream ms = new MemoryStream())//创建内存流
18 {
19 //将对象序列化到内存中
20 xml.Serialize(ms, t);
21 ms.Position = default;//将内存流的位置设为0
22 return (T)xml.Deserialize(ms);//继续反序列化
23 }
24 }
25
26 /// <summary>
27 /// 二进制序列化的方式进行深拷贝
28 /// 确保需要拷贝的类里的所有成员已经标记为 [Serializable] 如果没有加该特性特报错
29 /// </summary>
30 /// <typeparam name="T"></typeparam>
31 /// <param name="t"></param>
32 /// <returns></returns>
33 public static T BinaryDeepCopy<T>(T t)
34 {
35 //创建二进制序列化对象
36 BinaryFormatter bf = new BinaryFormatter();
37 using (MemoryStream ms = new MemoryStream())//创建内存流
38 {
39 //将对象序列化到内存中
40 bf.Serialize(ms, t);
41 ms.Position = default;//将内存流的位置设为0
42 return (T)bf.Deserialize(ms);//继续反序列化
43 }
44 }
45 }