C# 反序列化会引发此位C代码的异常

C# 反序列化会引发此位C代码的异常,c#,exception,serialization,memorystream,C#,Exception,Serialization,Memorystream,编辑:关闭此帖子,因为我已经找到了出错的原因,但是没有删除此帖子。。我生成了一个更新的帖子,其中包含了一个更加精炼的问题 大家好 我读了一些二进制数据。我希望将其转换为System.Drawing.Image,因此我创建了一个Image对象的实例,使用内存流作为输入数据 在完成之后,我序列化然后反序列化一些业务逻辑的映像。反序列化引发异常。如果我用文件名构造器而不是内存流构造器来创建映像实例,那么它将100%正常工作。这表明图像对象可以在线序列化 我使用的内存流有什么问题 这是我用来在图像对象序

编辑:关闭此帖子,因为我已经找到了出错的原因,但是没有删除此帖子。。我生成了一个更新的帖子,其中包含了一个更加精炼的问题

大家好

我读了一些二进制数据。我希望将其转换为System.Drawing.Image,因此我创建了一个Image对象的实例,使用内存流作为输入数据

在完成之后,我序列化然后反序列化一些业务逻辑的映像。反序列化引发异常。如果我用文件名构造器而不是内存流构造器来创建映像实例,那么它将100%正常工作。这表明图像对象可以在线序列化

我使用的内存流有什么问题

这是我用来在图像对象序列化之前生成图像对象的代码:-

// Fake way of getting some binary (image) data.
byte[] data = File.ReadAllBytes("Chick.jpg");

using (Stream originalBinaryDataStream = new MemoryStream(data))
{
    // This works perfectly fine, if use this method (which i can't).
    //image = new Bitmap("Chick.jpg");

    // This throws an exception when it's deserialized.
    // It doesn't like the memory stream reference?
    image = new Bitmap(originalBinaryDataStream);     
}
这是尝试反序列化映像的代码,它会引发异常

是否存在未正确处理或无法序列化的内容。。因此抛出异常

请帮助:

编辑:在我的图像调试器可视化工具中调用异常

我已经上传了完整的VS2008解决方案1.28MB下载

其中有两个项目->visualizer类和MS测试类。如果您运行唯一的单元测试,它将抛出generic read:unavouse GDI+异常,因为它无法反序列化通过线路传递给调试器viz的映像实例。如果您向它传递了一个使用文件路径构造函数创建的映像实例,那么反序列化就可以完美地工作

编辑2:使用了不同的文件上传网站-干杯

编辑3:如何实际再现错误

将项目更改为调试模式而不是发布模式 删除所有断点。 打开ImageDebuggerVisualizer.cs 在第22行添加断点。 现在调试UnitTest1单元测试方法。将显示一幅图像。。关上那扇窗户。。然后突然你就到了临界点。跨过那一步,砰的一声!!!!崩溃猛敲 编辑4:如果您不想下载解决方案文件,这里有两个异常屏幕截图

,其中引发异常。
刚刚测试了你的代码,它工作了,代码很好。图像文件或路径一定有问题。 这是我的测试:

private void Form1_Load(object sender, EventArgs e)     
       {
            byte[] data = File.ReadAllBytes("c:\\t.jpg");

            using (Stream originalBinaryDataStream = new MemoryStream(data))
            {
                // This works perfectly fine, if use this method (which i can't).
                //image = new Bitmap("Chick.jpg");


                // This throws an exception when it's deserialized.
                // It doesn't like the memory stream reference?
                originalBinaryDataStream.Seek(0, SeekOrigin.End);
                pictureBox1.Image=  new Bitmap(originalBinaryDataStream);
            }
        }

我在PictureBox中看到了图像。

我怀疑,在您的真实代码中,您正在写入内存流,而不是回放它;如果是这种情况,在尝试重新加载之前,请将位置设置为0。

我已更新了初始问题帖子,其中包含一个链接,指向整个VS解决方案,这是一个类和一个单元测试。单元测试抛出失败异常。请检查。

他没有写入内存流,而是用字节数组初始化它。不需要重新定位。@Ovidiu-因此我提到了真实代码…我在内存流上添加了一个seek来结束,它仍然有效,请看我的答案。我们需要整个代码上下文和引发的异常。我在一个屏幕截图中添加了整个异常信息,因为这是一个巨大的异常。我们需要整个代码上下文和引发的异常。多么糟糕的共享站点!未来使用nod Kees的提示!我把它改成了你的建议。干杯也没有重新编程,单元测试运行良好。您必须发布异常的堆栈跟踪。至少这只小鸡值得。我只是写了解决方案,并报告了例外情况。我在原始帖子中添加了回购的步骤。请查看它是如何回购的。pEase?您应该按照前面的建议发布引发的异常。在原始帖子中添加了显示异常的链接。