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 もシリアル化しようとしていると思います。しかし、この時点でシリアル化から除外する方法はありますか?