C# 无法捕获特定的异常

C# 无法捕获特定的异常,c#,C#,我正在序列化一个XML文件。在序列化过程中,我收到一般异常。很难跟踪问题 我的代码是: 试一试 { 字符串m_fileName=@“d:\Xml\Person.Xml”; XmlSerializer xmlPerSerlzr=新的XmlSerializer(typeof(person)); txtWrt=newstreamwriter(m_文件名); 序列化(txtWrt,person); } catch(异常serExp) { Show(“异常为:+serExp.Messa

我正在序列化一个XML文件。在序列化过程中,我收到一般异常。很难跟踪问题

我的代码是:


试一试
{
字符串m_fileName=@“d:\Xml\Person.Xml”;
XmlSerializer xmlPerSerlzr=新的XmlSerializer(typeof(person));
txtWrt=newstreamwriter(m_文件名);

序列化(txtWrt,person);
}
catch(异常serExp)
{
Show(“异常为:+serExp.Message.ToString());
}


错误消息:

反映类型“Person”时出错

我的问题是如何强制CLR发出准确的错误?

检查异常的类型,例如

serExp.GetType().ToString()
并检查内部异常(类型和消息)

这会给你一些更有用的信息。

使用

serExp.StackTrace
而不是

serExp.Message.ToString()

我认为最好同时检查堆栈跟踪和内部异常

你可以用这样的东西

    string GetExceptionString(Exception ex)
    {
        string str = "";
        while (ex != null)
        {
            str += ex.Message + "\n" + ex.StackTrace;
            ex = ex.InnerException;
        }
        return str;
    }

在catch子句中设置断点,然后在调试模式下运行。然后,您可以更轻松地浏览异常对象并找出发生的情况。

使用:

exc.ToString();
在异常对话框的调试模式中,选择查看详细信息选项。 可能您没有实现0参数构造函数。

更好的方法是serExp.ToString(),它在一种情况下实现了上述两种功能,.ToString()不是完全无用的对象类型语句。