.NET Framework Class Library
ExceptionGetObjectData Method

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

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)
Syntax
Public Overridable Sub GetObjectData ( _
	info As [%$TOPIC/fwb1489e_en-us_VS_110_2_0_0_0_0%], _
	context As [%$TOPIC/fwb1489e_en-us_VS_110_2_0_0_0_1%] _
)
public virtual void GetObjectData(
	[%$TOPIC/fwb1489e_en-us_VS_110_2_0_1_0_0%] info,
	[%$TOPIC/fwb1489e_en-us_VS_110_2_0_1_0_1%] context
)
public:
virtual void GetObjectData(
	[%$TOPIC/fwb1489e_en-us_VS_110_2_0_2_0_0%]^ info, 
	[%$TOPIC/fwb1489e_en-us_VS_110_2_0_2_0_1%] context
)
abstract GetObjectData : 
        info:[%$TOPIC/fwb1489e_en-us_VS_110_2_0_3_0_0%] * 
        context:[%$TOPIC/fwb1489e_en-us_VS_110_2_0_3_0_1%] -> unit  
override GetObjectData : 
        info:[%$TOPIC/fwb1489e_en-us_VS_110_2_0_3_0_2%] * 
        context:[%$TOPIC/fwb1489e_en-us_VS_110_2_0_3_0_3%] -> unit
public function GetObjectData(
	info : [%$TOPIC/fwb1489e_en-us_VS_110_2_0_4_0_0%], 
	context : [%$TOPIC/fwb1489e_en-us_VS_110_2_0_4_0_1%]
)

Parameters

info
Type: System.Runtime.SerializationSerializationInfo

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

context
Type: System.Runtime.SerializationStreamingContext

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

Implements

ISerializableGetObjectData(SerializationInfo, StreamingContext)
_ExceptionGetObjectData(SerializationInfo, StreamingContext)
Exceptions
ExceptionCondition
ArgumentNullException

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

Remarks

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.

Examples

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()
// Example for the Exception( SerializationInfo, StreamingContext ) 
// constructor and the Exception.GetObjectData( SerializationInfo,  
// StreamingContext ) method. 
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;
using System.Security.Permissions;

namespace NDP_UE_CS
{
    // Define a serializable derived exception class.
    [Serializable()]
    class SecondLevelException : Exception, ISerializable
    {
        // This public constructor is used by class instantiators. 
        public SecondLevelException( string message, Exception inner ) :
            base( message, inner )
        {
            HelpLink = "http://MSDN.Microsoft.com";
            Source = "Exception_Class_Samples";
        }

        // This protected constructor is used for deserialization. 
        protected SecondLevelException( SerializationInfo info, 
            StreamingContext context ) :
                base( info, context )
        { }

        // GetObjectData performs a custom serialization.
        [SecurityPermissionAttribute(SecurityAction.Demand,SerializationFormatter=true)]
        public override void GetObjectData( SerializationInfo info, 
            StreamingContext context ) 
        {
            // Change the case of two properties, and then use the  
            // method of the base class.
            HelpLink = HelpLink.ToLower( );
            Source = Source.ToUpper( );

            base.GetObjectData( info, context );
        }
    }

    class SerializationDemo 
    {
        public static void Main() 
        {
            Console.WriteLine( 
                "This example of the Exception constructor " +
                "and Exception.GetObjectData\nwith Serialization" +
                "Info and StreamingContext parameters " +
                "generates \nthe following output.\n" );

            try
            {
                // This code forces a division by 0 and catches the  
                // resulting exception. 
                try
                {
                    int  zero = 0;
                    int  ecks = 1 / zero;
                }
                catch( Exception ex )
                {
                    // Create a new exception to throw again.
                    SecondLevelException newExcept =
                        new SecondLevelException( 
                            "Forced a division by 0 and threw " +
                            "another exception.", ex );

                    Console.WriteLine( 
                        "Forced a division by 0, caught the " +
                        "resulting exception, \n" +
                        "and created a derived exception:\n" );
                    Console.WriteLine( "HelpLink: {0}", 
                        newExcept.HelpLink );
                    Console.WriteLine( "Source:   {0}", 
                        newExcept.Source );

                    // This FileStream is used for the serialization.
                    FileStream stream = 
                        new FileStream( "NewException.dat", 
                            FileMode.Create );

                    try
                    {
                        // Serialize the derived exception.
                        SoapFormatter formatter = 
                            new SoapFormatter( null,
                                new StreamingContext( 
                                    StreamingContextStates.File ) );
                        formatter.Serialize( stream, newExcept );

                        // Rewind the stream and deserialize the  
                        // exception.
                        stream.Position = 0;
                        SecondLevelException deserExcept = 
                            (SecondLevelException)
                                formatter.Deserialize( stream );

                        Console.WriteLine( 
                            "\nSerialized the exception, and then " +
                            "deserialized the resulting stream " +
                            "into a \nnew exception. " +
                            "The deserialization changed the case " +
                            "of certain properties:\n" );

                        // Throw the deserialized exception again. 
                        throw deserExcept;
                    }
                    catch( SerializationException se )
                    {
                        Console.WriteLine( "Failed to serialize: {0}", 
                            se.ToString( ) );
                    }
                    finally
                    {
                        stream.Close( );
                    }
                }
            }
            catch( Exception ex )
            {
                Console.WriteLine( "HelpLink: {0}", ex.HelpLink );
                Console.WriteLine( "Source:   {0}", ex.Source );

                Console.WriteLine( );
                Console.WriteLine( ex.ToString( ) );
            }
        }
    }
}

/*
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_CS.SecondLevelException: Forced a division by 0 and threw another except
ion. ---> System.DivideByZeroException: Attempted to divide by zero.
   at NDP_UE_CS.SerializationDemo.Main()
   --- End of inner exception stack trace ---
   at NDP_UE_CS.SerializationDemo.Main()
*/
// Example for the Exception( SerializationInfo, StreamingContext ) 
// constructor and the Exception.GetObjectData( SerializationInfo,  
// StreamingContext ) method.
#using <System.Runtime.Serialization.Formatters.Soap.dll>

using namespace System;
using namespace System::IO;
using namespace System::Runtime::Serialization;
using namespace System::Runtime::Serialization::Formatters::Soap;

// Define a serializable derived exception class.

[Serializable]
ref class SecondLevelException: public Exception, public ISerializable
{
public:

   // This public constructor is used by class instantiators.
   SecondLevelException( String^ message, Exception^ inner )
      : Exception( message, inner )
   {
      HelpLink = "http://MSDN.Microsoft.com";
      Source = "Exception_Class_Samples";
   }


protected:

   // This protected constructor is used for deserialization.
   SecondLevelException( SerializationInfo^ info, StreamingContext context )
      : Exception( info, context )
   {}


public:

   // GetObjectData performs a custom serialization.
   [System::Security::Permissions::SecurityPermissionAttribute
   (System::Security::Permissions::SecurityAction::LinkDemand, 
   Flags=System::Security::Permissions::SecurityPermissionFlag::SerializationFormatter)]
   virtual void GetObjectData( SerializationInfo^ info, StreamingContext context ) override
   {

      // Change the case of two properties, and then use the  
      // method of the base class.
      HelpLink = HelpLink->ToLower();
      Source = Source->ToUpper();
      Exception::GetObjectData( info, context );
   }

};

int main()
{
   Console::WriteLine( "This example of the Exception constructor " 
   "and Exception.GetObjectData\nwith Serialization" 
   "Info and StreamingContext parameters " 
   "generates \nthe following output.\n" );
   try
   {

      // This code forces a division by 0 and catches the  
      // resulting exception. 
      try
      {
         int zero = 0;
         int ecks = 1 / zero;
      }
      catch ( Exception^ ex ) 
      {

         // Create a new exception to throw again.
         SecondLevelException^ newExcept = gcnew SecondLevelException( "Forced a division by 0 and threw " 
         "another exception.",ex );
         Console::WriteLine( "Forced a division by 0, caught the " 
         "resulting exception, \n" 
         "and created a derived exception:\n" );
         Console::WriteLine( "HelpLink: {0}", newExcept->HelpLink );
         Console::WriteLine( "Source:   {0}", newExcept->Source );

         // This FileStream is used for the serialization.
         FileStream^ stream = gcnew FileStream( "NewException.dat",FileMode::Create );
         try
         {

            // Serialize the derived exception.
            SoapFormatter^ formatter = gcnew SoapFormatter( nullptr,StreamingContext(StreamingContextStates::File) );
            formatter->Serialize( stream, newExcept );

            // Rewind the stream and deserialize the  
            // exception.
            stream->Position = 0;
            SecondLevelException^ deserExcept = dynamic_cast<SecondLevelException^>(formatter->Deserialize( stream ));
            Console::WriteLine( "\nSerialized the exception, and then " 
            "deserialized the resulting stream " 
            "into a \nnew exception. " 
            "The deserialization changed the case " 
            "of certain properties:\n" );

            // Throw the deserialized exception again. 
            throw deserExcept;
         }
         catch ( SerializationException^ se ) 
         {
            Console::WriteLine( "Failed to serialize: {0}", se->ToString() );
         }
         finally
         {
            stream->Close();
         }

      }

   }
   catch ( Exception^ ex ) 
   {
      Console::WriteLine( "HelpLink: {0}", ex->HelpLink );
      Console::WriteLine( "Source:   {0}", ex->Source );
      Console::WriteLine();
      Console::WriteLine( ex->ToString() );
   }

}

/*
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

SecondLevelException: Forced a division by 0 and threw another exception. ---> S
ystem.DivideByZeroException: Attempted to divide by zero.
   at main()
   --- End of inner exception stack trace ---
   at main()

*/
Version Information

.NET Framework

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

.NET Framework Client Profile

Supported in: 4, 3.5 SP1
.NET Framework Security
  • SecurityCriticalAttribute 

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