XmlSerializer:在.NET 2.0中捕获了属性设置程序内部的异常,但在4.0中未捕获

XmlSerializer:在.NET 2.0中捕获了属性设置程序内部的异常,但在4.0中未捕获,.net,exception,xml-serialization,.net,Exception,Xml Serialization,我找不到答案。希望有人能帮忙 我有一个属性设置程序,如果值不满足某些条件,它会抛出一个异常。属性所在的类被序列化/反序列化 在.NET 2.0中反序列化类时,会捕获异常。如果我将项目目标更改为.NET 4.0,则不会捕获异常 有什么想法吗 谢谢, 萨姆 对不起。“例外”指的是我抛出的一个。下面是一个示例代码 这是我想要序列化/反序列化的示例类: public class MyClass { public string Name { get{return myNa

我找不到答案。希望有人能帮忙

我有一个属性设置程序,如果值不满足某些条件,它会抛出一个异常。属性所在的类被序列化/反序列化

在.NET 2.0中反序列化类时,会捕获异常。如果我将项目目标更改为.NET 4.0,则不会捕获异常

有什么想法吗

谢谢, 萨姆


对不起。“例外”指的是我抛出的一个。下面是一个示例代码

这是我想要序列化/反序列化的示例类:

public class MyClass
{
    public string Name
    {
        get{return myName;}
        set
        {
            if (value == "") throw new Exception("Name is blank!");
            myName = value;
        }
    }

    private string myName;
}
下面是调用反序列化程序的代码

        try
        {
            XmlSerializer xs = new XmlSerializer(typeof(MyClass));
            using (FileStream stream = File.OpenRead("myclass.xml"))
            {
                MyClass mc = xs.Deserialize(stream) as MyClass;
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
下面是测试异常的“myclass.xml”文件

<?xml version="1.0"?>
<MyClass>
  <Name></Name>
</MyClass>

使用.NET2.0,我得到了带有异常消息的消息框。使用.NET4.0,我得到“用户代码未处理的异常”

谢谢


Sam

一个临时解决方法是禁用中断用户未处理的异常

  • 调试
    • 例外情况。。。
      • 为“公共语言运行时异常”取消勾选“用户未处理”

如果需要粒度,可以针对要引发的特定异常禁用此选项


请注意,这只应被视为临时解决方法。您通常会希望勾选它,因为它是一个非常有用的调试辅助工具

一个临时解决方法是禁用对用户未处理异常的中断

  • 调试
    • 例外情况。。。
      • 为“公共语言运行时异常”取消勾选“用户未处理”

如果需要粒度,可以针对要引发的特定异常禁用此选项


请注意,这只应被视为临时解决方法。您通常会希望勾选它,因为它是一个非常有用的调试辅助工具

你所说的“异常被捕获”是什么意思?你能提供一些代码和解释哪些异常被抛出/未抛出或捕获/未捕获吗?你能发布一个缩小的示例代码来重现/说明问题吗?确认-我用3.5(用户正确显示异常)和4.0(用户代码未处理异常)进行了测试。如果你在IDE之外运行程序,您会发现在所有情况下都会处理异常。类似地,如果禁用“中断用户未处理的CLR异常”,将处理该异常。我不明白为什么会有这种行为上的改变。真有趣!我没有在IDE之外进行测试。你说的“异常被捕获”是什么意思?你能提供一些代码和解释哪些异常被抛出/未抛出或捕获/未捕获吗?你能发布一个缩小的示例代码来重现/说明问题吗?确认-我用3.5(用户正确显示异常)和4.0(用户代码未处理异常)进行了测试。如果你在IDE之外运行程序,您会发现在所有情况下都会处理异常。类似地,如果禁用“中断用户未处理的CLR异常”,将处理该异常。我不明白为什么会有这种行为上的改变。真有趣!我没有在IDE外测试,太棒了!谢谢你的提示,太好了!谢谢你的提示。