J'ai des données stockées à l'aide de sérialisement binaire pour la classe suivante: à un moment donné, la classe a été remplacée par ceci: p> Ceci fait des problèmes de désérialisant les anciennes données. P> Ma première pensée était de mettre en œuvre Je voudrais modifier les anciennes données pour faire correspondre la structure actuelle pendant la désérialisation ou avoir un moyen propre de la mise à niveau des anciennes données. P> P > iserialisable code>, mais cette classe a de nombreuses propriétés ainsi que des centaines de classes héritantes que je devrait-en mettre en œuvre cela aussi. p>
4 Réponses :
Si les données sont utilisées uniquement en interne, ma première pensée consisterait à écrire un code jeton simple pour désémarrer vos données binaires à l'aide de l'ancienne "NomValuecollection", carapotiez-la à un dictionnaire et de la rééparatialiser. Même si cela prendra quelques jours pour traiter toutes les données, il ne semble pas la peine d'implémenter un correctif sur votre nouveau code pour prendre en charge les anciennes données. P>
Même s'il est non seulement utilisé en interne, un importateur semble être le moyen le plus simple d'aller. p>
Ajout de bons conseils d'Olivierd, je vous suggère de définir les deux classes, mais essayez initialement de désérialiser comme version actuelle. Dans votre bloc de capture, désérialisez-le comme la version héritée, puis mettez-la à l'actuelle et sauvegardez-la. Lorsqu'il n'y a pas d'instances de la version héritée, vous pouvez supprimer le code. P>
ajoutez le nouveau _ fielderrors code> sous un nom différent, dites
_fielderrors2 code> et faites-le
[Facultatif] code> . Ensuite, implémentez un
[ondeserialized] code>
méthode qui copie les données de _fielderrors code> à
_fielderrors2 code> (si présent) et efface _fielderRors. p>
Cela a fourni l'approche la plus réaliste de mes besoins, mais j'ai fini par descendre d'une route différente.
Après avoir enquêté sur quelques options, j'ai formulé les conclusions suivantes: P>
Idéalement, je serais en mesure d'accéder à la valeur à partir de l'original efficacement, cela me met dans une liaison. Heureusement, j'ai pu déterminer que ce champ est réellement utilisé uniquement comme résumé des erreurs de validation des formulaires et ne devrait pas être sérialisé en premier lieu, je l'ai donc exclu de la sérialisation. P> NomValuecollection Code> et de la convertir manuellement en
Dictionnaire
iserialisable code>, mais cela a posé deux problèmes majeurs: correspondant à la nommage des données héritées et à l'inclusion de la logique de sérialisation pour toutes les classes héritantes (dont il y a des centaines). p>