背景
我有一个序列化为 XML 文件的类,因此用户可以更改一些启动设置。该类有一个枚举,我希望反序列化程序接受名称或 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()
或,而 Visual Studio 2010 只是忽略它。.Break()
Visual Studio 不能或不会跟踪反序列化构造函数,或者有什么问题?