2010-01-04 5 views
1

Actuellement, j'ai besoin de sérialiser un de mes objets qui contient plus mon propre objet classes. Mais le problème est que je ne veux pas l'enregistrer dans un fichier, puis le récupérer dans le flux de la mémoire. Est-il possible de sérialiser directement mon objet dans un flux.Problème lors de la sérialisation

J'ai utilisé BinaryFormatter pour la sérialisation. D'abord, j'ai utilisé un MemoryStream directement pour prendre la sortie sérialiser mais il donne l'erreur au moment de la désérialisation. Mais plus tard, quand je le sérialiser avec un fichier puis le fermer et rouvrir à nouveau, cela fonctionne parfaitement. Mais je veux le prendre directement dans le flux parce que dans mon programme, je dois le faire fréquemment pour le passer en client réseau. Et en utilisant le fichier à plusieurs reprises pourrait ralentir mon logiciel.

J'espère effacer mon problème. Tout Sugetion?

+0

Quelle est l'erreur que vous obtenez en utilisant 'MemoryStream'? –

+1

Parlez-vous de .Net? Je pense que vous venez des noms des types que vous mentionnez. Pouvez-vous confirmer? –

+0

Quelle est l'erreur que vous obtenez? – JoshBerke

Répondre

5

Si vous essayez de désérialiser à partir du même MemoryStream, vous êtes-vous souvenu de chercher d'abord au début du flux?

var foo = "foo"; 
var formatter = new BinaryFormatter(); 
using (var stream = new MemoryStream()) 
{ 
    // Serialize. 
    formatter.Serialize(stream, foo); 

    // Deserialize. 
    stream.Seek(0, SeekOrigin.Begin); 
    foo = formatter.Deserialize(stream) as string; 
} 
+0

Vous savez que je suis une personne très stupide, Comment j'ai oublié cela. Merci l'homme. Désolé de vous déranger tous pour cela. – Harun

+0

+1 pour mentionner spécifiquement la recherche qui semble être le problème de l'OP. –

+1

@Harun, si cette réponse répond correctement à votre problème, cliquez sur la coche sous le numéro pour le marquer comme la bonne réponse. Cela donne à l'affiche des points de rep pour la réponse et aide votre propre score "% accepté" qui encourage les gens à répondre à vos questions. –

1

Voici un exemple rapide et sale de sérialisation d'une chaîne. Est-ce ce que vous essayez de faire?

static void Main(string[] args) 
     { 
      var str = "Hello World"; 

      var stream = Serialize(str); 
      stream.Position = 0; 
      var str2 = DeSerialize(stream); 

      Console.WriteLine(str2); 
      Console.ReadLine(); 
     } 

     public static object DeSerialize(MemoryStream stream) 
     { 
      BinaryFormatter formatter = new BinaryFormatter(); 
      return formatter.Deserialize(stream); 
     } 
     public static MemoryStream Serialize(object data) 
     { 

      MemoryStream streamMemory = new MemoryStream(); 
      BinaryFormatter formatter = new BinaryFormatter(); 

      formatter.Serialize(streamMemory, data); 

      return streamMemory; 

     } 
Questions connexes