2008-10-08 6 views
4

Exception Jeté: « System.ComponentModel.ReflectPropertyDescriptor est pas marqué comme sérialisable »exception Odd jeté dans .NET

Est-ce que cela signifie que je manqué quelque chose marquer comme moi-même sérialisable, ou est-ce quelque chose hors de mon contrôle?

+0

Il s'est avéré que c'était un problème avec la liaison de données. J'ai été capable de l'éliminer. Merci pour l'aide. –

Répondre

1

Avez-vous un champ de ce type dans votre classe. Si c'est le cas, vous devrez implémenter ISerializable vous-même - l'implémentation automatique nécessite que tous vos champs soient marqués Serializable.

4

Pouvez-vous donner plus de contexte sur la question de savoir quand cela se produit et avec quel sérialiseur? La plupart des serializers ont la capacité d'ignorer certains membres - NonSerializedAttribute pour BinaryFormatter, XmlIgnoreAttribute pour XmlSerializer, etc.

Avoir une instance PropertyDescriptor dans votre classe signifie généralement que votre classe agit comme un sac de propriété; Dans ce cas, vous devrez peut-être effectuer une sérialisation personnalisée (ISerializable/IXmlSerializable). Si le champ est présent pour une autre raison, marquez-le pour qu'il soit ignoré. Ce problème (ou des symptômes similaires) est également très fréquent lorsque vous avez un événement (tel qu'un événement de notification de modification/INotifyPropertyChanged) auquel l'interface utilisateur est connectée (liaison de données); Dans ce cas, vous devez marquer le champ de support comme non sérialisé. Je ne sais pas VB, mais avec C# vous pouvez le faire avec des « événements comme le terrain », comme ceci:

[field: NonSerialized] 
public event EventHandler BarChanged; 
+0

* facepalm * Frapper mon visage contre l'écran en me demandant pourquoi '[NonSerialized] ne fonctionne pas pour mon événement. Manquant le 'champ:'. –

Questions connexes