Можете ли вы дать больше контекста относительно того, когда это происходит и с каким сериализатором? Большинство сериализаторов имеют возможность игнорировать определенных членов - NonSerializedAttribute
для BinaryFormatter
, XmlIgnoreAttribute
для XmlSerializer
и т. Д.
Наличие экземпляра PropertyDescriptor
в вашем классе обычно означает, что ваш класс действует как мешок свойств; в этом случае вам может потребоваться выполнить пользовательскую сериализацию (ISerializable
/ IXmlSerializable
). Если поле существует по какой-либо другой причине, просто пометьте его как игнорируемое.
Это (или похожие симптомы) также очень часто встречается, когда у вас есть событие (например, событие уведомления об изменении / INotifyPropertyChanged
), к которому подключен пользовательский интерфейс (привязка данных); в этом случае вам нужно пометить вспомогательное поле как не сериализованное. Я не знаю о VB, но с C # вы можете сделать это с «полевыми событиями» следующим образом:
[field: NonSerialized]
public event EventHandler BarChanged;