개체를 deserialize하고 경우에 따라 제대로 작동하지만 실패한 개체도 있습니다. 예외는 본질적으로 나에게 의미가 없지만 디버깅을 리디렉션 할 수 있도록 정확히 어디에서 실패했는지 파악할 수있는 방법이 있어야합니다. 개체 그래프에서 SerializationException을 일으킨 개체를 확인하는 방법은 무엇입니까?
이
는 예외입니다 ". '201326592' 개체에 대한지도합니다" 이 메시지 = 적발되지 않았다System.Runtime.Serialization.SerializationException = "mscorlib의"스택 트레이스
자료 : System.Runtime.Serialization.Formatters.Binary에서 System.Runtime.Serialization.Formatters.Binary._ BinaryParser.ReadObject()에서 . System.Runtime.Serialization.Formatters에서 System.Runtime.Serialization.Formatters.Binary.ObjectReader.Deserialize (isCrossAppDomain, IMethodCallMessage methodCallMessage HeaderHandler 핸들러 __BinaryParser serParser, 부울 fcheck가 부울 )에서 _BinaryParser.Run() .Binary.BinaryFormatter.Deserialize (트림 serializationStream, HeaderHandler 핸들러 부울 fcheck가 부울 isCrossAppDomain, IMethodCallMessage methodCallMessage) System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Deserialize시 (스트림 serializationStream) 시 아나 C에서 lytics.ReportInstance.Open (스트림 은 TStream, 부울 OpenResults) : \ 사용자 ... 경로 ... \ 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 근본 원인에 따라 다릅니다. –