Export (0) Print
Expand All

Exception.GetObjectData Method

When overridden in a derived class, sets the SerializationInfo with information about the exception.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)

'Declaration
Public Overridable Sub GetObjectData ( _
	info As SerializationInfo, _
	context As StreamingContext _
)

Parameters

info
Type: System.Runtime.Serialization.SerializationInfo

The SerializationInfo that holds the serialized object data about the exception being thrown.

context
Type: System.Runtime.Serialization.StreamingContext

The StreamingContext that contains contextual information about the source or destination.

Implements

ISerializable.GetObjectData(SerializationInfo, StreamingContext)
_Exception.GetObjectData(SerializationInfo, StreamingContext)

ExceptionCondition
ArgumentNullException

The info parameter is a null reference (Nothing in Visual Basic).

GetObjectData sets a SerializationInfo with all the exception object data targeted for serialization. During deserialization, the exception is reconstituted from the SerializationInfo transmitted over the stream.

The following code example defines a derived serializable Exception class that implements GetObjectData, which makes minor changes to two properties and then calls the base class to perform the serialization. The example forces a divide-by-0 error and then creates an instance of the derived exception. The code serializes the instance to a file, deserializes the file into a new exception, which it throws, and then catches and displays the exception's data.

' Example for the Exception( SerializationInfo, StreamingContext ) 
' constructor and the Exception.GetObjectData( SerializationInfo,  
' StreamingContext ) method. 

' If compiling with the Visual Basic compiler (VBC) from the command  
' prompt, be sure to add the following switch: 
'    /reference:System.Runtime.Serialization.Formatters.Soap.dll  
Imports System
Imports System.IO
Imports System.Runtime.Serialization
Imports System.Runtime.Serialization.Formatters.Soap
Imports Microsoft.VisualBasic
Imports System.Security.Permissions

Namespace NDP_UE_VB

    ' Define a serializable derived exception class.
    <Serializable()>  _
    Class SecondLevelException
        Inherits Exception

        ' This public constructor is used by class instantiators. 
        Public Sub New( message As String, inner As Exception )
            MyBase.New( message, inner )

            HelpLink = "http://MSDN.Microsoft.com"
            Source = "Exception_Class_Samples" 
        End Sub ' New 

        ' This protected constructor is used for deserialization. 
        Protected Sub New( info As SerializationInfo, _
            context As StreamingContext )
                MyBase.New( info, context )
        End Sub ' New 


        ' GetObjectData performs a custom serialization.
        <SecurityPermissionAttribute(SecurityAction.Demand, _
                                     SerializationFormatter:=True)> _
        Overrides Sub GetObjectData( info As SerializationInfo, _
            context As StreamingContext) 

            ' Change the case of two properties, and then use the  
            ' method of the base class.
            HelpLink = HelpLink.ToLower()
            Source = Source.ToUpper()

            MyBase.GetObjectData(info, context)

        End Sub ' ISerializable.GetObjectData
    End Class ' SecondLevelException


    Module SerializationDemo

        Sub Main()
            Console.WriteLine( _
                "This example of the Exception constructor " & _
                "and Exception.GetObjectData " & vbCrLf & _
                "with SerializationInfo and StreamingContext " & _
                "parameters generates " & vbCrLf & _
                "the following output." & vbCrLf )

            ' This code forces a division by 0 and catches the  
            ' resulting exception. 
            Try 
                Try 
                    Dim zero As Integer = 0
                    Dim ecks As Integer = 1 \ zero

                ' Create a new exception to throw again. 
                Catch ex As Exception

                    Dim newExcept As New SecondLevelException( _
                        "Forced a division by 0 and threw " & _
                        "another exception.", ex )

                    Console.WriteLine( _
                        "Forced a division by 0, caught the " & _
                        "resulting exception, " & vbCrLf & _
                        "and created a derived exception:" & vbCrLf )
                    Console.WriteLine( "HelpLink: {0}", _
                        newExcept.HelpLink )
                    Console.WriteLine( "Source:   {0}", _
                        newExcept.Source )

                    ' This FileStream is used for the serialization. 
                    Dim stream As New FileStream( _
                        "NewException.dat", FileMode.Create )

                    ' Serialize the derived exception. 
                    Try 
                        Dim formatter As New SoapFormatter( Nothing, _
                            New StreamingContext( _
                                StreamingContextStates.File ) )
                        formatter.Serialize( stream, newExcept )

                        ' Rewind the stream and deserialize the  
                        ' exception.
                        stream.Position = 0
                        Dim deserExcept As SecondLevelException = _
                            CType( formatter.Deserialize( stream ), _
                                SecondLevelException )

                        Console.WriteLine( vbCrLf & _
                            "Serialized the exception, and then " & _
                            "deserialized the resulting stream " & _
                            "into a " & vbCrLf & "new exception. " & _
                            "The deserialization changed the case " & _
                            "of certain properties:" & vbCrLf )

                        ' Throw the deserialized exception again. 
                        Throw deserExcept

                    Catch se As SerializationException
                        Console.WriteLine( "Failed to serialize: {0}", _
                            se.ToString( ) )

                    Finally
                        stream.Close( )
                    End Try 
                End Try 

            Catch ex As Exception
                Console.WriteLine( "HelpLink: {0}", ex.HelpLink )
                Console.WriteLine( "Source:   {0}", ex.Source )

                Console.WriteLine( )
                Console.WriteLine( ex.ToString( ) )
            End Try 
        End Sub ' Main

    End Module ' SerializationDemo
End Namespace ' NDP_UE_VB

' This example of the Exception constructor and Exception.GetObjectData 
' with SerializationInfo and StreamingContext parameters generates 
' the following output. 
'  
' Forced a division by 0, caught the resulting exception, 
' and created a derived exception: 
'  
' HelpLink: http://MSDN.Microsoft.com 
' Source:   Exception_Class_Samples 
'  
' Serialized the exception, and then deserialized the resulting stream into a 
' new exception. The deserialization changed the case of certain properties: 
'  
' HelpLink: http://msdn.microsoft.com 
' Source:   EXCEPTION_CLASS_SAMPLES 
'  
' NDP_UE_VB.SecondLevelException: Forced a division by 0 and threw another exce 
' ption. ---> System.DivideByZeroException: Attempted to divide by zero. 
'    at NDP_UE_VB.SerializationDemo.Main() 
'    --- End of inner exception stack trace --- 
'    at NDP_UE_VB.SerializationDemo.Main()

.NET Framework

Supported in: 4.6, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

  • SecurityCriticalAttribute 

    requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Show:
© 2014 Microsoft