原文地址:https://www.cnblogs.com/profession/p/6222489.html

//四种深拷贝方法
public static T DeepCopyByReflect<T>(T obj)
{
//如果是字符串或值类型则直接返回
if (obj is string || obj.GetType().IsValueType) return obj; object retval = Activator.CreateInstance(obj.GetType());
FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
foreach (FieldInfo field in fields)
{
try { field.SetValue(retval, DeepCopyByReflect(field.GetValue(obj))); }
catch { }
}
return (T)retval;
} public static T DeepCopyByXml<T>(T obj)
{
object retval;
using (MemoryStream ms = new MemoryStream())
{
XmlSerializer xml = new XmlSerializer(typeof(T));
xml.Serialize(ms, obj);
ms.Seek(, SeekOrigin.Begin);
retval = xml.Deserialize(ms);
ms.Close();
}
return (T)retval;
} public static T DeepCopyByBin<T>(T obj)
{
object retval;
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter bf = new BinaryFormatter();
//序列化成流
bf.Serialize(ms, obj);
ms.Seek(, SeekOrigin.Begin);
//反序列化成对象
retval = bf.Deserialize(ms);
ms.Close();
}
return (T)retval;
} //需要silverlight支持
public static T DeepCopy<T>(T obj)
{
object retval;
using (MemoryStream ms = new MemoryStream())
{
DataContractSerializer ser = new DataContractSerializer(typeof(T));
ser.WriteObject(ms, obj);
ms.Seek(, SeekOrigin.Begin);
retval = ser.ReadObject(ms);
ms.Close();
}
return (T)retval;
}

最新文章

  1. WPF弹出带蒙板的消息框
  2. 三言两语之简单上手sass
  3. prolog 规则
  4. 在报表中给session赋值实现报表间参数共享
  5. Droid4x设置代理抓包
  6. CTF中那些脑洞大开的编码和加密
  7. Spring Aop实例
  8. CMP指令(转)
  9. 真正理解KMP算法
  10. 拼接json示例 json分页并显示所有页码
  11. 你真的会用 SDWebImage?
  12. 转载:Java多线程中join方法的理解
  13. vim自动补全文章搜集
  14. js复制button在ie下的解决方式
  15. Unity 4.5.2 for Mac 下载+安装+破解
  16. bootstrap-paginator 分页插件笔记
  17. jQuery入门(一)
  18. jQuery小测的总结
  19. HDMI中的AVmute是什么功能
  20. 大数据 --&gt; Spark和Hadoop作业之间的区别

热门文章

  1. Python-文件读写及修改
  2. keras多层感知机MLP
  3. pytorch中的学习率调整函数
  4. 011-多线程-基础-基于AbstractQueuedSynchronizer自定义同步组件
  5. 008-多线程-JUC集合-Queue-LinkedBlockingQueue
  6. 阶段5 3.微服务项目【学成在线】_day07 课程管理实战_06-课程营销实战分析
  7. request cluster ID mismatch
  8. ALV显示金额字段值扩大100倍
  9. Intellij IDEA 2016.3.4 注册激活--转
  10. 完全解读 margin 标签