背景
我有一个序列化为XML文件的类,因此用户可以更改一些启动设置。该类有一个枚举,我希望反序列化器接受name或int值为有效。
protected MyClass(SerializationInfo info, StreamingContext context) {
// want to Step Into right here
try {
logLevel = (Logger.Level)info.GetValue("LogLevel", typeof(Logger.Level));
}
catch(Exception) {
logLevel = (Logger.Level)info.GetValue("LogLevel", typeof(Int32));
}
…
它不起作用,XML deserialize()仍然引发一个异常抱怨,而不是'0'或'1'等不是该类型的有效值。所以很自然地我尝试通过 Step Into (F11)调试行MyClass mc = (MyClass)xmlSerializer.Deserialize(filepath);
步入 不会达到预期的代码
但Visual Studio跳转到的下一行是类'默认构造函数MyClass()的开头,而不是MyClass(SerializationInfo,StreamingContext)!!
所以我在F11中通过该构造函数(它分配与XML文件无关的默认值,据我所知,根本不应该被调用)当它跳出构造函数时我会在异常处理和以前一样 - 显然没有完成我编写的反序列化代码。
我甚至尝试在我要调试的代码的开头放置System.Diagnostics.Debugger.Launch()
或.Break()
,而Visual Studio 2010只是忽略它。
是否有关于反序列化构造函数的内容,Visual Studio无法或不会通过它们进行跟踪,或者是什么交易?