C#中的序列化异常

时间:2009-09-29 11:15:14

标签: c# .net serialization

当我尝试在C#中序列化类时发生序列化异常, 因为它拥有对非序列化类的引用。 问题是我要序列化的类非常复杂, 并包含很多对其他复杂类的引用, 在这么多代码中我找不到有问题的类的引用。 有没有办法找出属性或非序列化类的归档? 也许在异常细节的某个地方?我没有找到类似的东西。

谢谢:)

2 个答案:

答案 0 :(得分:1)

您应该开始检查异常的堆栈跟踪。

如有必要,请将Visual Studio配置为停止任何抛出的异常(Debug - > Exception - > Check Thrown复选框列,以查找公共语言运行时异常)

这应该在抛出异常的确切位置停止Visual Studio,这将为您提供可以检查的堆栈跟踪。

如果这还不够,并且取决于您的可序列化类的创建方式,您可以尝试通过sgen.exe运行程序集来创建另一个负责序列化的程序集。

sgen.exe有na选项“/ k”用于保存源代码。您可以将此代码添加到项目中,您应该可以在该项目中断点。

答案 1 :(得分:0)

尝试通过“catch”从异常中获取信息 (异常exceptionObject)并包装序列化 调用try块(在此示例中打开一个文件):

try 
{
    FileStream inputFileStream = 
      new FileStream(aSaveFileNameFullPath, FileMode.Open, FileAccess.Read);
}
catch (Exception exceptionObject) 
{
    displayStandardExceptionInfo(exceptionObject, "Could not open file " + aSaveFileNameFullPath);
}

displayStandardExceptionInfo()定义为:

public static void displayStandardExceptionInfo(
  ref System.Exception anExceptionObject, ref string aStartText)
{
    string errMsg1 = 
      "Error: " + anExceptionObject.ToString() + "\n";
    string errMsg2 =
      "\n" + "Message: " + anExceptionObject.Message + "\n";

    string errMsg3 = "";
    if (anExceptionObject.InnerException != null)
    {
        errMsg3 = 
          "Extra info: " + 
          anExceptionObject.InnerException.Message +
          "\n";
    }
    string errMsg =
      aStartText + "\n" + "\n" + errMsg1 + errMsg2 + errMsg3;
    System.Windows.Forms.MessageBox.Show(errMsg);
}