Вопрос

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

Вот код:

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

s.Position = 0;

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

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

stream.Seek(0, SeekOrigin.Begin);

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top