2009-05-19 12 views
4

Dans le besoin de sérialiser un objet et il est possible que la version de l'ensemble a changé lors de la désérialisation. De plus, il peut arriver que l'objet change un peu. XmlSerializer ne stocke pas d'informations de type et si l'objet change un bit, il n'échoue pas, mais XmlSerializer ne peut pas sérialiser les propriétés privées ou internes d'une super classe que je ne peux pas marquer avec des attributs. J'ai donc jeté un coup d'œil au DataContractSerializer. Cela semble bien, donc le problème avec les propriétés privées/internes de la super classe serait résolu, toutes les propriétés devraient être marquées et je n'en ai pas besoin, mais qu'en est-il des informations de type? Et comment se comporte le DataContractSerializer, si certaines propriétés sont supprimées, renommées ou ajoutées?Lequel mieux gérer Versioning? XmlSerializer vs DataContractSerializer?

+0

Vous pourriez être intéressé aussi dans le NetDataContractSerializer http://msdn.microsoft.com/en-us/library/system. runtime.serialization.netdatacontractserializer.aspx Spécifiquement pour les objets .NET – bendewey

+0

NetDataContractSerializer stocke la définition du type explizit de l'objet sérialisé. Puisque nous utilisons une dénomination forte, cela pose beaucoup de problèmes si nous essayons de désérialiser un objet avec une autre version d'assemblage. – Enyra

Répondre

2

J'ai fait un test avec DataContractSerializer et il semble que le DataContractSerializer soit très tolérant vis-à-vis des changements d'objet, donc je vais utiliser l'approche.

0

Il est toujours possible d'utiliser XmlSerializer pour vos besoins. Mais vous devrez implémenter la logique de sérialisation personnalisée en utilisant l'interface IXmlSerializable.