我在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