У меня есть вопрос о двоичной сериализации в 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, потому что он все взаимосвязан в графе объектов. Но можно ли как-то исключить его из сериализации на этом этапе?