序列化异常:在完成分析之前遇到流结束-C#

序列化异常:在完成分析之前遇到流结束-C#,c#,serialization,binaryformatter,C#,Serialization,Binaryformatter,我正在尝试将字节数组转换为对象。为了消除任何可能出现的问题,我创建了一个简单的windows窗体,它只需调用在我的原始代码中中断的函数,就得到了相同的错误。你有什么想法吗 private void button1_Click(object sender, EventArgs e) { byte[] myArray = new byte[] {1, 2, 3, 4, 5, 6, 7}; object myObject = ByteArrayToObj

我正在尝试将字节数组转换为对象。为了消除任何可能出现的问题,我创建了一个简单的windows窗体,它只需调用在我的原始代码中中断的函数,就得到了相同的错误。你有什么想法吗

    private void button1_Click(object sender, EventArgs e)
    {
        byte[] myArray = new byte[] {1, 2, 3, 4, 5, 6, 7};
        object myObject = ByteArrayToObject(myArray);

        if(myObject != null)
        {
            button1.Text = "good";
        }
    }

    private object ByteArrayToObject(byte[] arrBytes)
    {
        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter binForm = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        MemoryStream memStream = new MemoryStream(arrBytes);
        memStream.Position = 0;
        return binForm.Deserialize(memStream);
    }

因为你没有说你对结果对象做了什么,所以很难给你一个更具体的答案。但是,字节数组已经是一个对象:

private void button1_Click(object sender, EventArgs e)
{
    byte[] myArray = new byte[] { 1, 2, 3, 4, 5, 6, 7 };
    object myObject = myArray as object;

    if (myObject != null)
    {
        button1.Text = "good";
    }
}

BinaryFormatter
的功能不仅仅是读取/写入字节

请尝试以下示例,首先序列化,然后读取序列化对象的内容:

byte[] myArray = new byte[] { 1, 2, 3, 4, 5, 6, 7 };

System.Runtime.Serialization.Formatters.Binary.BinaryFormatter binForm = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
MemoryStream memStream = new MemoryStream();
// Serialize the array
binForm.Serialize(memStream, myArray);
// Read serialized object
memStream.Position = 0;
byte[] myArrayAgain = new byte[memStream.Length];
memStream.Read(myArrayAgain, 0, myArrayAgain.Length);
结果表明,序列化内容如下所示:

0, 1, 0, 0, 0, 255, 255, 255, 255, 1, 0, 0, 0, 0, 0, 0, 0, 15, 1, 0, 0, 0, 7, 0, 0, 0, 2, 1, 2, 3, 4, 5, 6, 7, 11

你看,有一个页眉和一个页脚。您的实际对象快结束了。

是什么让您认为特定字节数组构成有效对象的?是什么让字节数组限定或取消其构成有效对象的资格?二进制序列化不仅仅是序列化字节。它是类型安全的,它将元数据添加到描述对象的流中。我刚刚有一个库函数,它要求它的一个参数是对象,我只需要向它传递一组数据。我在web上找到了将字节数组转换为对象的代码,并在许多地方使用它,所以我认为这就是实现的方法。@KhaledBoulos如果你有一个作为对象的参数,你不需要转换任何东西……一切都是对象。当然不是序列化它。。。只需调用
方法(myArray)
@caerolus-true。我使用
作为
来证明它可以编译,然后可能在运行时失败。事实上,原始行是
objectmyobject=myArray@chuex我知道,我知道..那句话是给他的!:-)@caerolus LOL不用担心。