[C#] SOAP & Serialization

Signaler
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
-
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
-
mon code marche enfin à moitié.

lors de la désérialisation, je me prend souvent SerializationException
: Erreu d'analyse, aucun assembly associé à la clé xml
a1:http://schemas.microsoft.com/clr/nsassem/[...]cutlure%3Dneutral%2C%20PublicKeyToken[..]
ConfigNode



ConfigNode est une de mes classes

si je regénère le XML à partir de mon fichier INI initial, ca repart mais c gonflat cette erreur qui revient?.



une idée ?




----------------------------
C++ forever
C# amateur

6 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
Salut,
Avec si peu d'informations, c'est dur de t'aider. T'as pas un morceau de code ? Des explications supplémentaires ?
Par exemple, poste voire la méthode qui s'occupe de déserializer...

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

[Serializable()]

public class ConfigNode : System.Collections.DictionaryBase

{}



[Serializable()]

public class ConfigMainObject

{

public virtual void WriteXml (string destinationFilename)

{

SoapFormatter oSOAPSerial = new SoapFormatter();


System.IO.FileStream oFS = new
System.IO.FileStream(destinationFilename, FileMode.Create);

oSOAPSerial.Serialize(oFS, this.RootNode);

oFS.Close();

}



public virtual void ReadXml (string sourceFilename)

{

SoapFormatter oSOAPSerial = new SoapFormatter();


System.IO.FileStream oFSR = new
System.IO.FileStream(sourceFilename, FileMode.Open);


this.m_RootNode
= (ConfigNode)oSOAPSerial.Deserialize(oFSR);

oFSR.Close();

}



private ConfigNode m_RootNode;

}




Le reste des données internes n'a rien à voir avec la sérialization
----------------------------
C++ forever
C# amateur
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
Dans le Write pour commencer, tu fais appel à this RootNode, j'imagine que c'est une Property qui fait appel à m_RootNode? Si oui, est-ce que c'est juste une Property qui get et set ou est-ce qu'il y a de la fonctionnalité supplémentaire ?


Sinon la méthode semble tout à fait correct, je ne pense pas que l'erreur vienne de là. Je pense plutôt que ça vient du fait que tu utilises un object qui dérive de DictionayBase. Je ne sais plus exactement comment fonctionne IDictionnary, mais j'imagine que tu dois le remplir de certains d'objects, deux questions :


Es-tu certain de ne pas avoir deux fois la même clef ?
Si non, quel genre d'object est-ce que tu rentres dans ton Dictionary ?

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

pour la property, c'est un get tout simple oui.



le dictionnaire dans ConfigNode sert à créer un arbre n-aire. Chaque
ConfigNode peut avoir des fils de type ConfigNode et en plus une valeur.

Le but de ce fichier de config est de pouvoir indexer directement le type



this.RootNode["INIT"]["MAIN_WINDOW_X"].Value



ou



this.RootNode["INIT"]["BACK_COLOR"]["RED"].Value



Je vais vérifier effectivement si je n'ai pas deux clés avec la meme
valeur mais comme je suis parti d'un fichier INI pour créer le XML, la
nomenclature par imbrication doit etre bonne.

----------------------------
C++ forever
C# amateur
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

Je progress dans ma recherche du pb.

Visiblement il semblerait que ca déconne lors de la recompilation de ma lib contenant ces classes.

----------------------------
C++ forever
C# amateur
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

Vala la différence, il stocke la version de l'assembly :









Et forcément à la relecture ca plante. Donc 2 solutions, soit on fige
la version de l'assembly, soit on l'ignore. soit qql'1 d'autre à une
idée ?

----------------------------
C++ forever
C# amateur