質問

ストリームをデシリアライズしようとしていますが、常に「解析が完了する前にストリームの終わりが発生しました」というエラーが発生しますか?

コードは次のとおりです:

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

他のヒント

シリアル化が完了し、シリアル化タイプが逆シリアル化タイプと一致することを確認します(つまり、1つで逆シリアル化する場合はBinaryFormatterでシリアル化していることを確認します)。また、Stream.Flush()などを使用して、シリアライズしたストリームが実際にシリアライズされたことを確認してください。

シリアル化するクラスに[Serializable]タグを追加するまで、同じ例外がスローされました:)

その後、すべて完全に機能しました。

s.Position = 0;

これは、アレイのデータのコピーを開始するには、最初に戻る必要があるためです!

私の場合、次を使用しました:

stream.Seek(0, SeekOrigin.Begin);

ストリームをシリアル化した後、逆シリアル化する前にストリームが動作します。これが役立つことを願っています!

同様のエラーが発生しました

シリアル化とデシリアル化の際に異なるデータ型を取得することについてでした。 誤って、データをmariadbに保存するときにMediumTextを使用し、データを取得するときにTextを使用したため、ストリームの一部しか取得できませんでした。

データ型が同じかどうかを確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top