Fin du flux rencontré avant la fin de l'analyse?
-
08-07-2019 - |
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?
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.