Конец потока встречался до завершения анализа? - PullRequest
40 голосов
/ 20 ноября 2008

Я пытаюсь десериализовать поток, но я всегда получаю эту ошибку «Конец потока обнаружен до завершения анализа»?

Вот код:

        //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

У кого-нибудь есть идеи?

Ответы [ 6 ]

50 голосов
/ 20 ноября 2008

Попробуйте установить позицию в 0 вашего потока и не используйте ваш объект, но тип объекта.

        BinaryFormatter b = new BinaryFormatter();
        s.Position = 0;
        return (YourObjectType)b.Deserialize(s);
6 голосов
/ 20 ноября 2008

Убедитесь, что сериализация завершена, и что тип сериализации соответствует типу десериализации (т. Е. Убедитесь, что вы сериализуете с BinaryFormatter, если вы десериализуете с одним). Кроме того, убедитесь, что поток, который вы сериализовали, действительно завершил сериализацию с помощью Stream.Flush () или чего-то подобного.

3 голосов
/ 22 мая 2017

У меня было такое же исключение, пока я не добавил тег [Serializable] в класс, который я сериализировал:)

Тогда все заработало отлично.

1 голос
/ 15 января 2010
s.Position = 0;

это потому, что вы должны вернуться к началу, чтобы начать копирование данных в массив!

0 голосов
/ 11 июля 2018

Я только что столкнулся с похожей ошибкой

Речь шла о получении другого типа данных при сериализации и десериализации. По ошибке при сохранении данных в mariadb я использовал MediumText, а при получении данных я использовал Text, поэтому я получил только часть потока.

Просто проверьте, совпадают ли типы данных.

0 голосов
/ 29 апреля 2015

В моем случае я использовал:

stream.Seek(0, SeekOrigin.Begin);

после того, как я сериализовал поток, и до того, как я десериализовал поток, работает шарм. надеюсь, это поможет!

...