我正在尝试反序列化流,但总是收到此错误“解析完成之前遇到流结束”?

这是代码:

        //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 进行反序列化,请确保使用 BinaryFormatter 进行序列化)。另外,请确保您序列化的流确实完成了序列化,使用 Stream.Flush() 或类似的方法。

我抛出了同样的异常,直到我将 [Serialized] 标签添加到我正在序列化的类中:)

然后一切都很顺利。

s.Position = 0;

这是因为你必须回到开始处才能开始复制阵列上的数据!

就我而言,我使用了:

stream.Seek(0, SeekOrigin.Begin);

在我序列化流之后,在我反序列化流之前,流工作的魅力。希望这可以帮助!

我刚刚遇到类似的错误

这是关于在序列化和反序列化时获取不同的数据类型。错误地,当将数据存储到 mariadb 时,我使用了 MediumText,而在获取数据时,我使用了 Text,这就是为什么我只获得了部分流的原因。

只需检查数据类型是否相同即可。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top