Sérialisation - Spécifier un attribut de classe comme optionnel

Sérialisation - Spécifier un attribut de classe comme optionnel - C#/.NET managed - Programmation

Marsh Posté le 16-03-2010 à 23:03:51    

Bon-jour(-soir),
le titre est dejà pas mal explicite mais je vais essayer de détailler mon cas.
 
J'ai un fichier qui contient des infos qui ont été sérializées.
 
La classe contenait 3 attributs au moment de la sérialisation, j'ai rajouté un attribut à cette classe.
Je voudrais spécifier qu'il est optionnel, actuellement je me prends un exception.
 
Le but à terme est d'obtenir les 2 versions de l'appli celle dont la classe X contient 3 attributs et celle dont cette même classe contient 4 attributs, et qu'elles aient toutes les deux possibilités de lire les 2 types de fichier sérialisé.
 
    * Application ( 3 attributs) + fichier sérialisé (3 attributs ) => cas classique ca doit marcher sans soucis
    * Application ( 4 attributs) + fichier sérialisé (4 attributs ) => cas classique ca doit marcher sans soucis
    * Application ( 3 attributs) + fichier à  désérialiser (4 attributs ) =>
      - à la sérialisation : fichier généré contient 3 attributs par instance
      - à la dé-sérialisation : le nouvel attribut est ignoré
    * Application ( 4 attributs) + fichier à désérialiser (3 attributs ) =>
      - à la sérialisation : fichier généré contient 4 attributs par instance
      - à la dé-sérialisation : le nouvel attribut est setté à null
 
 
 
Merci d'avance, j'ai parcouru la doc msdn mais j'ai ptet raté quelquechose


Message édité par pinpoy le 16-03-2010 à 23:05:12
Reply

Marsh Posté le 16-03-2010 à 23:03:51   

Reply

Marsh Posté le 17-03-2010 à 02:17:25    

Je me trompe peut être car je n'ai jamais été confronté à ton cas de figure et je n'ai jamais spécialement fait joujou avec la serialization sorti de ce que le framework fait nativement, mais à mon avis la serialisation telle qu'intégrée dans le framework ne couvre pas ton problème, je pense que tu as forcément des types identiques de chaque côté pour que le système puisse retrouver ses petits.

 

Dans ton cas tu es obligé d'implémenter tes propres méthodes de serialization/deserialization via ISerializable. C'est facile.
Genre : http://www.codeproject.com/KB/cs/objserial.aspx , http://www.switchonthecode.com/tut [...] -to-a-file (tutos anciens mais sans doute encore tt à fait applicables)
Sinon tu ne précises pas si tu parles de serialization xml ou binaire...


Message édité par TotalRecall le 17-03-2010 à 02:18:56

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 17-03-2010 à 07:58:31    

oui effectivement j'ai eu la même remarque sur developpez.com, je parle de serialisation XML.
 
Je vous tiens au courant si j'arrive à mes fins.

Reply

Marsh Posté le 17-03-2010 à 15:30:54    

Dans ton exemple de code tu n'as qu'un seul type de classe avec 2 attributs, dont l'un non initialisé.
Si j'ai bien compris, la question de pinpoy porte sur autre chose.
Deux classes différentes (A et B) avec des attributs identiques (a, b, c) à l'exception d'un quatrième (d) qui serait absent dans un cas, et il voudrait pouvoir instancier indifféremment des A ou B à partir d'un flux xml qui peut contenir ou non d.
Ce n'est pas la même chose qu'un attribut non initialisé comme dans ton cas où on peut assumer un default(type).


Message édité par TotalRecall le 17-03-2010 à 15:32:17

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed