C#无法捕获SerializationException

时间:2010-10-21 14:16:36

标签: c# serialization

我正在加载序列化文件的部分中遇到问题。如果文件无法反序列化,我想很好地失败,但由于某种原因,我的程序将破坏而不是进入catch子句。这是我的代码

using (FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open))
                {
                    try
                    {
                        BinaryFormatter bf = new BinaryFormatter();
                        document = (Document)bf.Deserialize(fs);
                    }
                    catch (SerializationException se)
                    {
                        MessageBox.Show("Error opening this file due to serialization", se.Source);
                    }
                    catch (Exception se)
                    {
                        MessageBox.Show("Error opening this file due to serialization", se.Source);
                    }
                }

运行此命令会导致程序在Deserialize()行中断。这是抛出的例外:

Type 'Source' in Assembly 'DocumentDesigner, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.

我知道如何修复异常,因为我注释了一些[Serializable]属性来测试它,但我只是想知道为什么try子句不起作用。

3 个答案:

答案 0 :(得分:3)

在“调试”菜单中,转到“例外”。您可能已为User Unhandled和Thrown选中了Common Language Runtime Exceptions。

这将导致Visual Studio调试器中断所有异常,即使它们位于try / catch块中。

如果在调试器遇到断点后按F10继续,你应该看到它进入catch块。

答案 1 :(得分:0)

如果要获取SerializationException,则必须在序列化过程中获得异常。通过注释[Serializable],您无法获得SerializationException。这样想,你不能在不创建数据库连接的情况下获得Time Out Exception。所以放回[Serializable],并给出错误的参数来获取SerializationException。

答案 2 :(得分:0)

为什么不查看抛出的异常类型?然后你就会知道你需要捕获什么异常。如果你的第一个捕获块没有捕获它,我猜它不是SerializationException