SerializationBinder Class

Je viens, par hazard, de découvrir une nouvelle classe du framework .Net: SerializationBinder. Elle permet customiser  les Types utilisés lors de la désérialisation.

Pour chaque nouveau type sauvegardé, la sérialisation binaire stocke les strings assemblyName et typeName dans le binaire. Lors de la désérialisation, ces informations sont utilisées pour obtenir le Type à désérialiser. Mais on peut insérer son code sous la forme d’une instance d’une classe dérivée de SerializationBinder. Son unique méthode (Type BindToType(string assemblyName, string typeName) ) se charge de trouver le bon type. Il est alors très simple de faire la substitution.

Il y a peine deux semaines, j’ai eu un besoin qui aurrait pu être trivial avec cette classe. J’ai renomé le namespace de base de tout un framework métier. Donc tous les types se sont retrouvés renomés de A.Namespace.TypeN en B.Namespace.TypeN. Evidement, des données sérialisées faisaient intervenir toute une arborescence de ces types (N allant de 1 à beaucoup). J’ai eu besoin de relire un fichier A avec les composants B. J’ai bien pensé automatiser le processus en réalisant une moulinette référençant A.dll et b.dll. Cette moulinette aurait su nativement désérialiser l’arborescence de A et sérialiser une arborescence de B, mais il restait à convertir toutes les instances des éléments de A en équivalent B. Soit un nombre important de fonction de conversion à écrire. SerializationBinder aurait permis de faire celà en quelques lignes…

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s