1

我得到了以下内容,而不是复杂的代码,无论如何我在反序列化时遇到异常。例外情况是:二进制流“0”不包含有效的 BinaryHeader。可能的原因是无效的流或序列化和反序列化之间的对象版本更改。

但我不明白我的代码有什么问题

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 回答