Mélanger sérialisation manuelle et automatique

Résolu
cs_vincnet68
Messages postés
100
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
24 mai 2013
- 22 mai 2013 à 19:41
cs_vincnet68
Messages postés
100
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
24 mai 2013
- 24 mai 2013 à 08:58
Bonjour,

Voilà mon problème, je souhaite enregistrer dans un fichier
[list]
[*] des données de manière manuelle (stream.WriteLine("Fichier=temp.tmp"))
[*] et des données issues de la sérialisation automatique d'une classe.(BinaryFormatter.Serialize(stream, classe))
/list

Le but est que lors de la déserialisation je lise le fichier :
[list]
[*] Lecture avec stream.ReadLine
[*] puis j'ouvre le fichier "temp.tmp"
[*] et ensuite je désérialize ma classe.
/list

J'espère que ma demande est assez bien formulée.

Est-ce que quelqu'un à un idée ?

Merci de votre aide.

Vincnet68

2 réponses

cs_vincnet68
Messages postés
100
Date d'inscription
samedi 26 octobre 2002
Statut
Membre
Dernière intervention
24 mai 2013
1
24 mai 2013 à 08:58
Merci de ta réponse.
Après une autre analyse du problème j'ai vu que lors de la désérialisation binaire le pointeur passait automatiquement à l'octet 1024 (alors que le début est largement avant).

Voici la solution que j'ai trouvé :

Sérialisation
Code C# :
StreamWriter writer = new StreamWriter(file);

//The header
writer.WriteLine("Version=1");
writer.WriteLine("PlugIn=" plugInList);
writer.Flush();

//The Containt
writer.WriteLine("Containt=");
writer.Flush();
writer.BaseStream.Seek(1024, SeekOrigin.Begin);
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formater = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
formater.Serialize(writer.BaseStream, tool);

//Close the file
writer.Flush();
writer.Close();


Désérialisation
Code C# :

StreamReader reader = new StreamReader(file);
//Header
string textVersion = reader.ReadLine(); // Version
string textPlugIn = reader.ReadLine(); //plugin

//Containt
reader.ReadLine(); // Containt
object importedFile;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formater = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
importedFile = formater.Deserialize(reader.BaseStream);


Voilà si ca peut aider quelqu'un

Vincent68
3
krimog
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Membre
Dernière intervention
14 février 2015
51
23 mai 2013 à 18:13
Salut,

Qu'as-tu déjà réalisé concernant ton problème ?
Car en théorie, tu peux le faire exactement comme tu le dis, puisque normalement la désérialisation se fait à partir du curseur dans ton fichier.

Cependant, mélanger du manuel et de l'automatique, je ne comprends pas bien l'intérêt.

Au pire, ce que tu peux faire, c'est créer un Tuple<string, classe> = new Tuple<string, classe>("temp.tmp", tonObjet);
et sérialiser le Tuple complet.

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
0