2013-10-09 5 views
1

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

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

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

    public MyClass() {} 
} 

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

ответ

0

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

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

+1

Что у вида, когда вы говорите «стандартный компонент сериализация»? –

+0

Это весь фреймворк под System.ComponentModel, System.ComponentModel.Design, System.ComponentModel.Design.Serialization. Например, посмотрите этот достойный образец проекта http://support.microsoft.com/kb/813808 Он может сериализовать элементы управления winforms для XML –