時,深度複製才能正常工作我已經實施了深度複製方法,在進入此方法時 - 類按預期複製。只有在進入方法
但是,如果我跨過該方法並檢查類實例,一些屬性不能正確複製。
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
你是對的。抱歉。但是,您可以擁有不可序列化類型的屬性,或者將某些屬性明確標記爲不可序列化。但我想你應該已經檢查了 –