时,深度复制才能正常工作我已经实施了深度复制方法,在进入此方法时 - 类按预期复制。只有在进入方法
但是,如果我跨过该方法并检查类实例,一些属性不能正确复制。
Profile profile = new Profile();
profile = Model.Copy<Profile>(Profile.GetProfileById(ProfileID));
profile.Save();
上面的代码显示了在哪里创建类实例并调用了副本。
符合数据库,我需要复制的配置文件在AddressCollection
属性中有2个项目。
如果我在行profile.Save()
上放置断点并逐步复制方法,则实例未被正确复制,并且AddressCollection
属性有0个项目。
但是,如果我真的进入复制方法,实例被正确复制并返回AddressCollection
与2项。
复制方法
public T Copy<T>(T oldObject) where T : CRMBusinessObjectBase
{
return Copy<T>(oldObject, null, null);
}
public T Copy<T>(T oldObject, CRMBusinessObjectBase parentObject, string parentProperty) where T : CRMBusinessObjectBase
{
//Create copy of business object
T copy = null;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter sz = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
//Serialize and then deserialize to a new object
using (MemoryStream ms = new MemoryStream())
{
sz.Serialize(ms, oldObject);
ms.Position = 0;
copy = (T)sz.Deserialize(ms);
}
//Set business object as new
copy.SetAsNew();
//Set parent property if specified
if (parentObject != null && !string.IsNullOrEmpty(parentProperty))
{
copy.GetType().GetProperty(parentProperty).SetValue(copy, parentObject, null);
}
return copy;
}
我曾试图改变BinaryFormatter
使用DataContractSerializer
没有任何的运气。 我也尝试使用反射而不是序列化,并发生同样的问题。
不太确定问题出在哪里。
截图
也许这些属性不被归为'Serializable'? –
该类是'Serializable',这不能应用于属性 – DNKROZ
你是对的。抱歉。但是,您可以拥有不可序列化类型的属性,或者将某些属性明确标记为不可序列化。但我想你应该已经检查了 –