1

I got the following, not to comlex code, anyway I get an exception while deserialization. The exception is: Binary stream '0' does not contain a valid BinaryHeader. Possible causes are invalid stream or object version change between serialization and deserialization.

But I don't get what is wrong with my code

using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;

namespace Server
{
    [Serializable]
    class testclass
    {
        int a;
        int b;
        int c;
        public testclass()
        {
            a = 1;
            b = 2;
            c = 3000;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            testclass test = new testclass();
            IFormatter bf = new BinaryFormatter();
            MemoryStream ms = new MemoryStream(new byte[512],0,512,true,true);
            bf.Serialize(ms,test);
            testclass detest=(testclass)bf.Deserialize(ms);
            Console.ReadLine();
        }
    }
}
4

2 に答える 2

2

あなたのストリームはあなたのデータの最後にあります

bf.Serialize(ms,test);

試す前に巻き戻して開始してください

testclass detest=(testclass)bf.Deserialize(ms);

Position=0ストリームで使用してください。

于 2012-07-16T09:39:41.570 に答える
2

最初にストリームの先頭に巻き戻す必要があります。その後、ストリームを逆シリアル化または読み取ることができます。例: ms.Seek(0, SeekOrigin.Begin);

static void Main(string[] args)
    {
        testclass test = new testclass();
        IFormatter bf = new BinaryFormatter();
        MemoryStream ms = new MemoryStream(new byte[512],0,512,true,true);
        bf.Serialize(ms,test);
        ms.Seek(0,SeekOrigin.Begin); //rewinded the stream to the begining.
        testclass detest=(testclass)bf.Deserialize(ms);
        Console.ReadLine();
    }
于 2012-07-16T09:46:13.110 に答える