我在C#中關於二進制序列化問題排除父對象上的二進制序列化在C#
我需要能夠對B類的深克隆對象(與課程的圖這一切的子對象一起)。我想通過使用二進制序列化來實現這一點。如果這是最好的方法,討論在這個問題的背景下是無關緊要的。
說我有這個類的結構:
public class A
{
private B objB;
}
[Serializable]
public class B : ICloneable
{
private C objC1;
private C objC2;
public object Clone()
{
B clone = Helper.Clone<B>(this);
return (B)clone;
}
}
[Serializable]
public class C
{
int a;
int b;
}
深克隆二進制序列的輔助類(我得到這個方法的代碼從什麼地方上了網,真的不記得在哪裏TBH,但看起來好吧)
public static class Helper
{
public static T Clone<T>(T OriginalObject)
{
using (Stream objectStream = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(objectStream, OriginalObject);
objectStream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(objectStream);
}
}
}
所以,在我的應用程序的某個時刻,我打下面的代碼:
B clone = (B)objA.objB.Clone();
問題在於調試器呻吟A類未被標記爲可序列化。
但我不希望序列化,我想序列B和它的子對象C.
我想它會嘗試序列化對父對象的太多,因爲這一切都在對象圖互連。但有什麼辦法可以排除它在這一點上被序列化?
我仔細檢查了,沒有參考無論是從B到A或從C到A ... 有一件事是,B包含一個公共事件字段,A中的事件處理程序會監聽這個事件嗎? – tjeuten 2010-01-12 22:15:54
@tjeuten,是的,事件就是這樣試圖序列化調用列表,請看我編輯的答案 – 2010-01-12 22:20:20
thx a zillion做了詭計! – tjeuten 2010-01-12 22:26:22