Sérialization [VB 2005]

Résolu
cs_Kite37 Messages postés 242 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 17 janvier 2018 - 26 févr. 2007 à 14:52
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 1 mars 2007 à 11:12
Bonjour !

Pour les besoin d'un jeu, j'ai créé un éditeur de cartes qui sérialise celles-ci en un seul fichier pour gagner du temps.
L'éditeur permet donc de sérialiser la map pour enregistrement, et ou de la désérialiser pour modifications.
Jusqu'ici, aucun problème.

Ensuite, j'ai voulu créer une petite application simple pour faire des tests avec les map produites, et c'est la que se pose le problème : le fichier n veut pas se désérialiser dans un autre logiciel que celui qui la créé ..

Quelqu'un a une idée?
voici l'erreur qui se produit :

"Impossible de trouver l'assembly 'Editeur de Map, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'."

et voici les codes de sérialisation et de désérialisation :

Private Function enregistrer() As Boolean
'la sub qui sérialise la map dans le fichier spécifié par l'utiliateur
'avec "map.bin" par défault.
Dim question As Short = MessageBox.Show("Si le fichier existe déja, il va etre remplacé. Continuer?", "Enregistrer", MessageBoxButtons.YesNo)
If question = DialogResult.Yes Then
enregistrer = True
'pour ce genre de chose, il vaut mieux essayer :p
Try
Dim serializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream = New FileStream(chemin & "\map.bin", FileMode.Create)
serializer.Serialize(stream, map1)
stream.Close()
MessageBox.Show("Map enregistrée avec succès a l'emplacement : " & "[" & chemin & "\map.bin ]")
Return True
Catch
Return False
End Try
Else : Return False
End If
End Function


Dim deserializer As Runtime.Serialization.Formatters.Binary.BinaryFormatter = _
New Runtime.Serialization.Formatters.Binary.BinaryFormatter
Dim stream As FileStream = New FileStream(repertoire & "\map.bin", FileMode.Open)
map1 = deserializer.Deserialize(stream) 'erreur se produit ici
stream.Close()

Merci d'avance :)

3 réponses

cs_Kite37 Messages postés 242 Date d'inscription lundi 6 mars 2006 Statut Membre Dernière intervention 17 janvier 2018
1 mars 2007 à 10:36
je ne sérialise pas en XML, je sérialise ma classe dans un fichier binaire.
la première ligne du fichier obtenu commence par :
'Editeur de Map, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'."
qui apparait aussi dans le message d'erreur.
J'ai cependant réussi a trouver un moyen de ne plus être géné par l'assembly (merci Malkuth) :
j'ai tout simplement mis ma classe sur une DLL. Lors de la sérialisation, sa prend l'assembly de la DLL, qui est alors la meme lors de la désérialisation.

Ca ne fait que contourner le problème, mais ça marche ^ ^

Voilou
3
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
28 févr. 2007 à 20:54
salut,

si ca réclame l'assembly d'origine, je pense que c'est parce que le l'élément root ou le <? ?> contiennent des références à ton assembly :
-> est-ce que la classe que tu sérializes possède l'attribut [XmlRoot("racine")]
-> peux-tu donner les quelques premières lignes du fichier XML de la sérialization ?

ShareVB
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
1 mars 2007 à 11:12
salut,

oupss, j'avais lu trop vite...cela dit l'erreur parait logique pour la sérialization binaire car il faut exactement la définition (ordres des champs privés, ...) de la classe donc de son assembly...une solution  habituelle est de mettre des méthodes Shared Serialize et Shared Deserialize dans la classe que l'on sérialize...comme ça on est obligé d'avoir la référence à l'assembly de la classe pour la sérialisation et désérialisation...

ShareVB
0
Rejoignez-nous