我正在加载序列化文件的部分中遇到问题。如果文件无法反序列化,我想很好地失败,但由于某种原因,我的程序将破坏而不是进入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子句不起作用。
答案 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
。