1

背景

我有一个序列化为 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 不能或不会跟踪反序列化构造函数,或者有什么问题?

4

0 回答 0