Странное исключение в .NET - PullRequest
4 голосов
/ 08 октября 2008

Исключение: «System.ComponentModel.ReflectPropertyDescriptor не помечен как Сериализуемый»

Значит ли это, что я пропустил пометку чего-либо как сериализуемого сам, или это что-то вне моего контроля?

Ответы [ 3 ]

4 голосов
/ 08 октября 2008

Можете ли вы дать больше контекста относительно того, когда это происходит и с каким сериализатором? Большинство сериализаторов имеют возможность игнорировать определенных членов - NonSerializedAttribute для BinaryFormatter, XmlIgnoreAttribute для XmlSerializer и т. Д.

Наличие экземпляра PropertyDescriptor в вашем классе обычно означает, что ваш класс действует как мешок свойств; в этом случае вам может потребоваться выполнить пользовательскую сериализацию (ISerializable / IXmlSerializable). Если поле существует по какой-либо другой причине, просто пометьте его как игнорируемое.

Это (или похожие симптомы) также очень часто встречается, когда у вас есть событие (например, событие уведомления об изменении / INotifyPropertyChanged), к которому подключен пользовательский интерфейс (привязка данных); в этом случае вам нужно пометить вспомогательное поле как не сериализованное. Я не знаю о VB, но с C # вы можете сделать это с «полевыми событиями» следующим образом:

[field: NonSerialized]
public event EventHandler BarChanged;
1 голос
/ 08 октября 2008

Это под вашим контролем. Скорее всего, проблема такая же: http://www.codeplex.com/SharedCache/Thread/View.aspx?ThreadId=19759

1 голос
/ 08 октября 2008

У вас есть поле этого типа в вашем классе. Если это так, вам придется внедрить ISerializable самостоятельно - автоматическая реализация требует, чтобы все ваши поля были помечены как Serializable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...