c# – 使用不同的命名空间复制两个相同的对象(递归反射)
发布时间:2020-12-16 00:17:01 所属栏目:百科 来源:网络整理
导读:我在c#中工作,有几个工作区有一个特定的类,在每个工作区中它总是相同的. 我希望能够拥有此类的副本,以便能够使用它而无需处理命名空间差异. 例如: namespace1 { class class1{ public class2; } class class2{ public string; }}namespace2 { class class1{
我在c#中工作,有几个工作区有一个特定的类,在每个工作区中它总是相同的.
我希望能够拥有此类的副本,以便能够使用它而无需处理命名空间差异. 例如: namespace1 { class class1{ public class2; } class class2{ public string; } } namespace2 { class class1{ public class2; } class class2{ public string; } } 在我复制的类中,我有一个函数将所有数据复制到命名空间的类之一. public Object toNamespaceClass(Object namespaceClass) { try { Type fromType = this.GetType(); Type toType = namespaceClass.GetType(); PropertyInfo[] fromProps = fromType.GetProperties(); PropertyInfo[] toProps = toType.GetProperties(); for (int i = 0; i < fromProps.Length; i++) { PropertyInfo fromProp = fromProps[i]; PropertyInfo toProp = toType.GetProperty(fromProp.Name); if (toProp != null) { toProp.SetValue(this,fromProp.GetValue(namespaceClass,null),null); } } } catch (Exception ex) { } return namespaceClass; } 任何人都知道如何处理这种“递归反射”. 我希望eveything是可以理解的. 谢谢再见! 编辑: 解决方法
BinaryFormatter在.Net 4.5中不起作用,因为它记住了实例创建的类的类型.但是对于JSON格式,它没有. JSON序列化程序由Microsoft在DataContractJosnSerializer中实现.
这有效: public static T2 DeepClone<T1,T2>(T1 obj) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T1)); DataContractJsonSerializer deserializer = new DataContractJsonSerializer(typeof(T2)); using (var ms = new MemoryStream()) { serializer.WriteObject(ms,obj); ms.Position = 0; return (T2)deserializer.ReadObject(ms); } } 用法如下: var b = DeepClone<A,B>(a); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |