2010-09-22 4 views
1

J'apprends la sérialisation en C# et j'ai les bases, mais maintenant j'essaie quelque chose d'un peu plus compliqué et je cherche des indications sur les meilleures pratiques (je peux réaliser ce que Je veux, je veux juste connaître le «bon»/le plus facile/le moins de code/la méthode la plus robuste de le faire).Sérialiseur et héritage personnalisés en C#

J'ai une piste de course qui est composée de sections. Chaque type de section hérite d'une classe TrackSection commune. La classe TrackSection contient beaucoup de données sur la géométrie et d'autres choses que je ne veux pas sauvegarder et elle a besoin de certaines informations contextuelles lorsque le constructeur est appelé, j'ai donc implémenté l'interface ISerializable et fourni mes propres méthodes pour gérer (de) sérialisation. Les classes qui héritent de TrackSection sont beaucoup plus simples, et je serais heureux que tous leurs champs soient sérialisés automatiquement, mais je suppose que puisque la classe de base est ISerializable ils devraient probablement le faire manuellement aussi (j'ai ajouté la désérialisation constructeur et appelez le constructeur de désérialisation de la classe de base dans chaque). En ce qui concerne la sérialisation, bien que je ne sache pas quoi faire, je m'attendais à ce que la méthode GetObjectData() d'ISerializable soit virtuelle, donc je pourrais étendre la sérialisation dans les sous-classes. Est-ce que j'ai simplement besoin d'implémenter ma propre méthode virtuelle qui est appelée à partir GetObjectData() de la classe de base, ou est-ce que je vais tout à fait faux? Comme je l'ai dit, je le fais fonctionner mais une meilleure solution ou des conseils généraux sur ce que je fais seraient très appréciés, car je ne peux m'empêcher de penser que ma solution est un peu plus compliquée que nécessaire être. Merci.

+0

Bit d'un moment spécial là, bien sûr, je peux juste marquer la méthode GetObjectData() comme virtuelle dans la classe de base ... –

Répondre

1

À moins que vous faites quelque chose où vous avez besoin de mettre en œuvre ISerializable, vous pourriez, au lieu de marquer simplement la classe avec l'attribut Serializable et marquer les champs que vous ne voulez pas sérialisé NonSerialized

+0

Je l'avais considéré, mais mon constructeur a besoin de quelques informations de contexte et je ne savais pas comment faire ça sans les méthodes personnalisées (autre que peut-être une classe statique qui stocke les informations de contexte, mais cela ne serait pas sûr pour les threads). –