Я десериализую объект, и в некоторых случаях он отлично работает, однако в других он терпит неудачу. Исключение для меня практически бессмысленно, но должен быть способ выяснить, где именно это произошло, поэтому я перенаправляю свою отладку.Как определить, какой объект в графе объектов вызвал SerializationException
Это исключение:
System.Runtime.Serialization.SerializationException был пойман Message = "Нет карты для объекта '201326592'."
Source = "mscorlib" StackTrace: в System.Runtime.Serialization.Formatters.Binary._ BinaryParser.ReadObject() в System.Runtime.Serialization.Formatters.Binary. _BinaryParser.Run() в System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize (HeaderHandler обработчика, __BinaryParser serParser, булевой fCheck, Boolean isCrossAppDomain, IMethodCallMessage methodCallMessage) в System.Runtime.Serialization.Formatters .Binary.BinaryFormatter.Deserialize (поток serializationStream, HeaderHandler обработчик, булева fCheck, булева isCrossAppDomain, IMethodCallMessage methodCallMessage) на System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize (поток serializationStream) в Ana lytics.ReportInstance.Open (Stream TStream, булевы OpenResults) в C: \ Users ... путь ... \ File.vb: линия 149 InnerException:
И это исходный код, где его ловушке:
Public Shared Function Open(ByVal tStream As IO.Stream, Optional ByVal OpenResults As Boolean = False) As ReportInstance
Dim tFormatter As System.Runtime.Serialization.Formatters.Binary.BinaryFormatter = PluginSerializationBinder.CreateSerializer()
Dim tInstance As ReportInstance
Try
If OpenResults Then 'case which always fails
'open the entire report
If System.Diagnostics.Debugger.IsAttached Then
Console.WriteLine("Deserializing: report results")
End If
tInstance = tFormatter.Deserialize(tStream) 'throws exception here
Return tInstance
Else 'case which always works (only deserializing part of the object)
'just open the stub
If System.Diagnostics.Debugger.IsAttached Then
Console.WriteLine("Deserializing: report instance")
End If
Dim tInput As New IO.BinaryReader(tStream)
Dim tLength As Long = tInput.ReadInt64()
Dim tBytes() As Byte = tInput.ReadBytes(tLength)
Dim tMem As New IO.MemoryStream(tBytes)
tInstance = tFormatter.Deserialize(tMem)
Return tInstance
End If
Catch ex As Exception
If (ex.Message.Contains("blah")) Then
Throw New UnsupportedException(ex.Message)
Else
Throw 'trapped here
End If
End Try
End Function
Спасибо, Брайен
Итак, как вы это исправите? – hofnarwillie
@hofnarwillie Это зависит от основной причины. –