Question

J'essaie de désérialiser un flux mais j'obtiens toujours l'erreur "Fin du flux rencontrée avant la fin de l'analyse"?

Voici le code:

        //Some code here
        BinaryFormatter b = new BinaryFormatter();
        return (myObject)b.Deserialize(s);//s---> is a Stream object that has been fill up with data some line over here

Quelqu'un a des idées?

Était-ce utile?

La solution

Essayez de définir la position sur 0 de votre flux et n'utilisez pas votre objet mais son type.

        BinaryFormatter b = new BinaryFormatter();
        s.Position = 0;
        return (YourObjectType)b.Deserialize(s);

Autres conseils

Assurez-vous que la sérialisation est terminée et que le type de sérialisation correspond au type de dé-sérialisation (c'est-à-dire, assurez-vous que vous sérialisez avec un BinaryFormatter si vous le désérialisez avec un). Assurez-vous également que le flux sur lequel vous avez effectué la sérialisation est vraiment terminé, avec un Stream.Flush () ou quelque chose de similaire.

J'ai eu la même exception levée, jusqu'à ce que j'ajoute la balise [Serializable] à la classe en cours de sérialisation:)

Ensuite, tout a parfaitement fonctionné.

s.Position = 0;

C'est parce que vous devez revenir au début pour commencer à copier les données sur le tableau!

Dans mon cas, j'ai utilisé:

stream.Seek(0, SeekOrigin.Begin);

après avoir sérialisé le flux et avant de le désérialiser, le flux fonctionne de manière charmante. espérons que cela aide!

Je viens de rencontrer une erreur similaire

Il s’agissait d’obtenir un type de données différent lors de la sérialisation et de la désérialisation. Par erreur, lors de la sauvegarde des données sur mariadb, j’ai utilisé MediumText et lors de la récupération des données, j’ai utilisé Text, c’est pourquoi j’ai reçu une partie seulement du flux.

Il suffit de vérifier si les types de données sont les mêmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top