Sérialisation dans un flux [Résolu]

Signaler
Messages postés
72
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
10 novembre 2008
-
Messages postés
72
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
10 novembre 2008
-
Bonjour,
Voila, je souhaite avoir un flux XML dans une string pour faire une requete sur un serveur.
Pour cela j'utilise la sérialisation dot net.
Par contre quand on utilise cette méthode, on est obligé d'utiliser un StreamWriter qui me fabrique un fichier xml...
Voici mon probléme (qui n'est en soit pas bloquant) : Sachant que je veux simplement une string et non un fichier, ya t il d'autre méthodes que l'XmlSerializer pour faire un flux car je ne voudrais éviter l'entrée sortie (lecture/Ecriture dans un fichier).
Si aucune autre méthode n'existe, pensez vous que ce problème est important et que ca affaiblira les performances de l'application (au moins 500 fichiers jours), le fichier est écrit avec le meme nom à chaque fois.
Merci pour votre aide.

5 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Stream est une classe abstraite qui represente un flux, flux internet, flux sur un fichier, flux dans la mémoire, flux dans un pipe en mémoire, flux via un pigeon voyageur, bref tu peux créer ton propre flux et il n'y a aucun lien avec un fichier !

Si la solution que je te propose plus haut avec le StringWriter ne te convient pas tu peux utiliser le memorystream. Ca doit donner un truc dans le genre :

using(MemoryStream ms = new MemoryStream())
using(StreamReader sr = new StreamReader(ms))
{
   serializer.Serialize(ms, o);
   String result = sr.ReadToEnd();
}

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL
Messages postés
72
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
10 novembre 2008

Réf MSDN : 
Pour ce faire, vous devez déterminer le format de transport dans lequel le flux XML doit être stocké sous forme de flux ou sous forme de fichier.
Oui mais comment faire la différence...
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Bonjour,

flux (stream) != fichier. On peut bien sur serializer un objet dans un flux en mémoire, dans un flux réseau, dans un flux zipé, etc...

tu peux aussi sérializer dans un textwriter. De mémoire ca donne :

using(StringBuilder sb = new StringBuilder())
using(StringWriter sw = new StringWriter(sb))
{
   serializer.serialize(sw, obj);
}

<hr />Cyril - MSP - MCPD ASP.net & MCTS SQL
Messages postés
72
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
10 novembre 2008

Encore les bons conseils de Cyril. Merci m'sieur !
Il semble tout de meme que les streams soit stockés sous forme de fichier car quand tu veux avoir une variable stream, tu est obligé de la créer ainsi :
Dim

myFileStream
As FileStream =
New FileStream(
"myStreamRep.xml", FileMode.Open)
Alors je pense surment que tu fais allusion au type stream mais dans le cas de la sérialisation de class, je ne sais pas comment m'en servir :

Dim

myStream As Stream = Nothing

mySerializer.Serialize(myStream, myStructure)

renvoi une erreur  de type "La valeur ne peut pas être null." car je pense que je n'arrive pas à initialiser ma variable correctement :
Est il possible d'utiliser ce type dans ce cas ?
Messages postés
72
Date d'inscription
jeudi 30 novembre 2000
Statut
Membre
Dernière intervention
10 novembre 2008

Très sympa! Merci beaucoup pour ces précisions codées !