繁体   English   中英

C#中的序列化异常

[英]Serialization Exception in C#

当我尝试对C#中的类进行序列化时,会发生序列化异常,原因是它持有对不可序列化类的引用。 问题在于我要序列化的类非常复杂,并且包含对其他复杂类的大量引用,而在如此大量的代码中我找不到对有问题的类的引用。 有没有办法找出该属性或非可序列化类在何处? 也许在异常细节中的某个地方? 我没有找到类似的东西。

谢谢 :)

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

如有必要,将Visual Studio配置为停止任何引发的异常(“调试”->“异常”->“检查抛出”复选框以查看“公共语言运行时异常”)

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

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

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

尝试通过“捕获”(ExceptionExceptionObject)并从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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM