[英]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.