1) ТРЕБУЕТ ли BinaryFormatter, чтобы класс Bar был украшен атрибутом [Serializable], или реализовывал интерфейс ISerializable?
Да, если используется BinaryFormatterдля сериализации экземпляра Bar.
2) Нужно ли украшать класс Foo атрибутом [Serializable]?
Да, если только вы не создадите пользовательскую сериализациюмеханизм, который не включает сериализацию экземпляра объекта Foo.Например, вы можете отдельно сериализовать компоненты x и y и создать новый экземпляр Foo из них в своем коде десериализации.В противном случае он должен иметь атрибут или интерфейс.
3) Если Bar просто украшен атрибутом [Serializable], будет ли поле Bar.SelectedFoo правильно сохранять свою ссылку на массив?или я получу копию этого Foo?
Если я правильно помню, массивы не так сериализуемы.Вы должны предоставить свой собственный механизм (через интерфейс ISerializable) для записи и чтения массивов.
Однако в общем случае, если граф сериализуемых объектов с взаимными ссылками друг на друга сериализуется с помощью BinaryFormatter, он будетвоссоздать ссылки правильно, не дублируя объекты.Это должно включать объекты, которые вы указываете в своем пользовательском коде сериализации, при условии, что вы декорируете свой Foo с помощью Serializable и передаете тот же экземпляр объекта в модуль форматирования как из массива, так и из поля.