2010-10-20 9 views
1

Nous développons une application qui stocke des objets dans un stockage isolé à l'aide de la sérialisation d'exécution .NET.
Des problèmes surviennent lorsque nous mettons à jour une application en ajoutant de nouvelles propriétés aux classes d'objets que nous sérialisons. Nous voulons donc effectuer une sorte de versionnement des objets dans un stockage isolé afin de pouvoir vérifier s'ils sont obsolètes avant d'être désérialisés.Comment reconnaître les versions d'objets placés dans un stockage isolé à l'aide de la sérialisation d'exécution .NET?

Des conseils et des idées sur la meilleure façon de le faire?

Que pensez-vous de formatter personnalisé implémentant l'interface IFormatter et peut-il aider au lieu de vesioning des objets?

J'ai écrit sur ce problème sur MS forum plus en détail here.

+2

Exactement * quel type de sérialisation utilisez-vous? Et est-ce normal que les données ne soient plus utilisables (c'est très inhabituel)? –

+1

Pourquoi ne pas simplement passer à un sérialiseur tolérant aux versions? au risque de ressembler à un disque cassé, protobuf-net pourrait vraiment aider ici. –

+0

Merci Marc. C'est vraiment utile et une solution à nos problèmes. – Janko

Répondre

1

Marc Gravell proposait en commentaire une excellente idée d'utiliser un sérialiseur tolérant aux versions. Il permet assez de contrôle de la désérialisation pour nous même pour rendre les objets obsolètes réutilisables. En savoir plus sur msdn

Merci à tous pour vos suggestions.

1

Vous pourriez avoir une sérialisation dans la sérialisation. D'abord une classe wrapper racontant la version, et tenant la classe true interne.

Cela se sent toutefois un peu mal puant ..

1

Voici quelques options (à un ordre particulier).

  • Nom du fichier basé sur la version
  • Placez le fichier dans un répertoire basé sur une version
  • Créer un objet wrapper qui contient des métadonnées sur chaque objet sérialisé telles que le numéro de version.
  • Ajouter une propriété à chaque objet qui contient le numéro de version de l'application persistante
1

Si son sérialisation binaire, vous pouvez lire les octets directement, et déterminer la version de montage de cette situation. L'octet numéro 22 contient des informations sur le type d'assemblage et d'objet, de sorte que vous pouvez écrire quelque chose qui le lirait, puis déterminer si vos objets sont obsolètes.