C# 深拷贝的四种方式
1:利用反射实现
![0](https://common.cnblogs.com/images/copycode.gif)
1 public static T DeepCopy(T obj) 2 { 3 //如果是字符串或值类型则直接返回 4 if (obj is string || obj.GetType().IsValueType) return obj; 5 6 object retval = Activator.CreateInstance(obj.GetType()); 7 FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); 8 foreach (FieldInfo field in fields) 9 { 10 try { field.SetValue(retval, DeepCopy(field.GetValue(obj))); } 11 catch { } 12 } 13 return (T)retval; 14 }
![0](https://common.cnblogs.com/images/copycode.gif)
2:利用xml序列化和反序列化实现
![0](https://common.cnblogs.com/images/copycode.gif)
1 public T DeepCopy(T obj) 2 { 3 object retval; 4 using (MemoryStream ms = new MemoryStream()) 5 { 6 XmlSerializer xml = new XmlSerializer(typeof(T)); 7 xml.Serialize(ms, obj); 8 ms.Seek(0, SeekOrigin.Begin); 9 retval = xml.Deserialize(ms); 10 ms.Close(); 11 } 12 return (T)retval; 13 }
![0](https://common.cnblogs.com/images/copycode.gif)
3:利用二进制序列化和反序列化实现
![0](https://common.cnblogs.com/images/copycode.gif)
1 public static T DeepCopy(T obj) 2 { 3 object retval; 4 using (MemoryStream ms = new MemoryStream()) 5 { 6 BinaryFormatter bf = new BinaryFormatter(); 7 //序列化成流 8 bf.Serialize(ms, obj); 9 ms.Seek(0, SeekOrigin.Begin); 10 //反序列化成对象 11 retval = bf.Deserialize(ms); 12 ms.Close(); 13 } 14 return (T)retval; 15 }
![0](https://common.cnblogs.com/images/copycode.gif)
4:利用silverlight DataContractSerializer实现,用于在silverlight 客户端使用
![0](https://common.cnblogs.com/images/copycode.gif)
1 public static T DeepCopy(T obj) 2 { 3 object retval; 4 using (MemoryStream ms = new MemoryStream()) 5 { 6 DataContractSerializer ser = new DataContractSerializer(typeof(T)); 7 ser.WriteObject(ms, obj); 8 ms.Seek(0, SeekOrigin.Begin); 9 retval = ser.ReadObject(ms); 10 ms.Close(); 11 } 12 return (T)retval;
![0](https://common.cnblogs.com/images/copycode.gif)
专业从事基于C#,WinForm ,WPF,Silverlight,WCF以及MS Sql Server 2000/2005/2008/2012 Oracle 9i/10g/11g数据库系统的ERP,CRM,企业进销存等各种数据库管理系统开发。Asp.net,Asp.net mvc,Webservice,WCF, Webapi等服务程序开发。
基于Oracle MySQL MSSql postgresql各种数据库的管理系统数据同步服务。以及基于MapXtreme, Arcgis Engine ,以及基于Arcgis for silverlight/Javascript的WebGIS等相关的GIS系统二次开发。基于Windows 10 Mobile的移动端开发方案。针对各种系统的二次开发维护,并提供相关开发的技术性支持,如程序BUG解决,应用系统架构,技术难题攻克等相关技术服务。
联系方式: QQ :80163278(devgis) 邮箱:devgis@qq.com