Я пытаюсь десериализовать поток, но я всегда получаю эту ошибку «Конец потока обнаружен до завершения анализа»?
Вот код:
//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;
это потому, что вы должны вернуться к началу, чтобы начать копирование данных в массив!
Я только что столкнулся с похожей ошибкой
Речь шла о получении другого типа данных при сериализации и десериализации. По ошибке при сохранении данных в mariadb я использовал MediumText, а при получении данных я использовал Text, поэтому я получил только часть потока.
Просто проверьте, совпадают ли типы данных.
В моем случае я использовал:
stream.Seek(0, SeekOrigin.Begin);
после того, как я сериализовал поток, и до того, как я десериализовал поток, работает шарм. надеюсь, это поможет!