c# - 在 Silverlight 的扩展方法中使用反射的深度复制?

标签 c# silverlight reflection silverlight-5.0 deep-copy

所以我试图找到一个通用的扩展方法,它使用反射创建一个对象的深拷贝,它可以在 Silverlight 中工作。使用序列化的深度复制在 Silverlight 中不是很好,因为它以部分信任的方式运行并且 BinaryFormatter 不存在。我也知道反射比克隆的序列化更快。

如果有一种方法可以复制公共(public)、私有(private)和 protected 字段,并且是递归的,这样它就可以复制对象中的对象,并且还能够处理集合、数组等,那就太好了。

网上查了下,只能找到利用反射实现的浅拷贝。我不明白为什么,因为你可以只使用 MemberwiseClone,所以对我来说,那些实现是无用的。

谢谢。

最佳答案

对于数据契约对象,我们使用了以下辅助方法在 Silverlight 中进行深度克隆:

public static T Clone<T>(T source)
        {

            DataContractSerializer serializer = new DataContractSerializer(typeof(T));
            using (MemoryStream ms = new MemoryStream())
            {
                serializer.WriteObject(ms, source);
                ms.Seek(0, SeekOrigin.Begin);
                return (T)serializer.ReadObject(ms);
            }
        }

这样使用:

var clone = CloneHelper.Clone<MyDTOType>(dtoVar);

关于c# - 在 Silverlight 的扩展方法中使用反射的深度复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13198658/

相关文章:

c# - 如何在 IIS 7 中禁用 flv 文件的 gzip 压缩并将 runAllManagedModulesForAllRequests 设置为 true?

c# - 为 PerSession WCF 服务调用两次静态构造函数

java - 类.getConstantPool()

java - 如何使用java获取类和方法中的所有变量和类型数据

asp.net - 使用反射将连接字符串添加到 ConfigurationManager.ConnectionString 的危险

c# - 将运算符视为对象

c# - 这个 LINQ 表达式可以从方法语法转换为查询语法吗?

c# - 转义字符 - 有什么用

silverlight - 尝试添加资源时出现未知解析器错误

c# - 推荐一个关于Silverlight动画的好教程