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