J'ai créé un composant non visuel en C# qui est conçu comme un espace réservé pour les métadonnées d'un formulaire.
Le composant possède une propriété qui est une collection d'objets personnalisés, cet objet est marqué comme Serializable et implémente le GetObjectData pour la formation de sérilisation et le profilage public pour la désérialisation. Dans le fichier resx pour le formulaire, il générera des données binaires pour stocker la collection, mais chaque fois que je fais une modification à la classe sérialisée, je reçois des erreurs de concepteur et j'ai besoin de supprimer les données manuellement du fichier resx et puis recréer ces données.Sérialisation de la conception en C#
J'ai essayé de changer le constuctor d'avoir un bloc try/catch autour de chaque propriété dans la classe
try
{
_Name = info.GetString("Name");
}
catch (SerializationException)
{
this._Name = string.Empty;
}
mais il se bloque encore. La dernière erreur que j'ai eue était que je devais implémenter IConvertible.
Je préférerais utiliser la sérialisation xml parce que je peux au moins le voir, est-ce possible pour une utilisation par le concepteur?
Existe-t-il un moyen de rendre la sérialisation plus stable et moins résistante aux changements?
Edit:
Plus d'informations ... peut-être meilleure description
J'ai une classe qui hérite de composants, il a une propriété qui est une collection de règles. Le RulesCollection semble devoir être marqué comme sérialisable, sinon il ne conserve pas ses membres. La classe Rules est également un composant avec l'attribut DesignTimeVisible (false) pour l'afficher dans la barre d'état des composants, cette classe n'est pas marquée Serializable. Si la collection marquée comme Serializable génère des données binaires dans le fichier resx (ce qui n'est pas l'idéal), l'EDI signale que la classe Rules n'est pas sérialisable.
Je pense que ce problème dépasse la simple question. Donc, je vais probablement le fermer prochainement.
Si quelqu'un a des liens vers quelque chose de similaire qui aiderait beaucoup.
Il semble que cette méthode produit également des données binaires sérialisés, plus tous les objets de la collection est représentée sur le plateau des composants – benPearce
ÉVIter apparaissant dans le plateau à l'aide ... [ToolboxItem (false)] ... sur la classe. J'utilise cette approche tout le temps et je ne reçois pas de données binaires. Donc, vous devez faire quelque chose qui force cela à se produire. Pouvez-vous poster un extrait de code? –