我对 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 类没有被标记为可序列化。
但我不想序列化 A,我想序列化 B,它是子对象 C。
我猜它也试图序列化父对象 A,因为它在对象图中都是相互关联的。但是有什么办法可以将它排除在序列化之外吗?