2016-12-01 1 views
2

Я пытаюсь сериализация моего объекта с помощью BinaryFormatter:Binary Formatter - тип UserControl не помечен как сериализуемая

private UserSettings _userSettings; 
var serializer = new BinaryFormatter(); 
using (var file = new FileStream(@"D:\test.bin", FileMode.Create)) 
{ 
    serializer.Serialize(file, _userSettings); 
} 

Но я получаю странное исключение:

Типа 'MyCustomUserControl' в Assembly 'xxx' не помечен как сериализуемым.

Класс UserSettings не имеет каких-либо ссылок на MyCustomUserControl, но он ссылается MyCustomUserControl.

+0

использовали ли вы '[Serializable]' для CustomUserControl? –

ответ

2

Ссылка на элемент управления может быть скрыта в событии. Если UserSettings класс реализует событие, к которому управление подпиской, добавьте атрибут [field:NonSerialized] к событию:

[field:NonSerialized] 
public event PropertyChangedEventHandler PropertyChanged; 
1

Для использования BinaryFormatter сериализатор, ваш класс должен быть помечены как Serializable. Вот пример:

[Serializable] 
public class MyCustomUserControl: Control 
{ 
    // 
} 
+1

Вы также можете вручную реализовать ISerializable, чтобы решить эту проблему, если вам нужен мелкозернистый контроль над процессом сериализации. – Kevin

+0

@Kevin Спасибо за это. –

+0

не будет '[Serializable()]' not '[Serializable]' – peterpep

Смежные вопросы