C # BinaryFormatter Serialize UserControl

Можно ли использовать методы BinaryFormatter Serialize / Deserialize для сериализации и десериализации класса, содержащего объекты пользовательского интерфейса? Я знаю, что это, вероятно, не рекомендуется, и действительно должны быть сериализованы только данные, но есть ли причина, по которой это не будет поддерживаться технически?

Скажем, например, у меня был такой класс, как:

public class MyClass
{
    private List<UC1> _ucList1 = new List<UC1>();
    private List<UC2> _ucList2 = new List<UC2>();

    public MyClass() {}
}

В приведенном выше теоретическом классе UC1 и UC2 относятся к типу UserControl, то есть это список пользовательских элементов управления. Есть ли причина, по которой это не может быть десериализовано? Я провел некоторое тестирование и, похоже, сериализуется в массив байтов нормально, но процедура десериализации выдает исключение «Конец потока обнаружен до того, как синтаксический анализ был завершен».


person Dustin Kofoed    schedule 09.10.2013    source источник


Ответы (1)


Нет, вам следует использовать стандартную сериализацию компонентов. Модуль форматирования двоичных файлов будет игнорировать, например, расширенные свойства, проектировать только свойства и не будет вызывать BeginInit / EndInit компонентов, реализующих ISupportInitialize. Я не знаю, что он будет делать с делегатами (событиями), возможно, он не сможет их сериализовать.

Наконец, если я хорошо помню, ни один из классов в WinForms не украшен атрибутом Serializable

person Panos Theof    schedule 09.10.2013
comment
Что вы имеете в виду, когда говорите о стандартной сериализации компонентов? - person Dustin Kofoed; 09.10.2013
comment
Это вся структура под System.ComponentModel, System.ComponentModel.Design, System.ComponentModel.Design.Serialization. Например, см. Этот достойный образец проекта support.microsoft.com/kb/813808 Он может сериализовать элементы управления winforms в XML - person Panos Theof; 10.10.2013