Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
IDeserializationCallback Interface
Collapse the table of content
Expand the table of content

IDeserializationCallback Interface

Indicates that a class is to be notified when deserialization of the entire object graph has been completed. Note that this interface is not called when deserializing with the XmlSerializer (System.Xml.Serialization.XmlSerializer).

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

<ComVisibleAttribute(True)> _
Public Interface IDeserializationCallback

The IDeserializationCallback type exposes the following members.

Public methodOnDeserializationRuns when the entire object graph has been deserialized.

Notes to Implementers

Implement the current interface as part of support for a method that is called when deserialization of the object graph is complete.

If an object needs to execute code on its child objects, it can delay this action, implement IDeserializationCallback, and execute the code only when it is called back on this interface.

Imports System
Imports System.IO
Imports System.Collections
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.Runtime.Serialization

' This class is serializable and will have its OnDeserialization method 
' called after each instance of this class is deserialized.
<Serializable()> Class Circle
   Implements IDeserializationCallback
   Private m_radius As Double 

   ' To reduce the size of the serialization stream, the field below is  
   ' not serialized. This field is calculated when an object is constructed 
   ' or after an instance of this class is deserialized.
   <NonSerialized()> Public m_area As Double 

   Public Sub New(ByVal radius As Double)
      m_radius = radius
      m_area = Math.PI * radius * radius
   End Sub 

   Private Sub OnDeserialization(ByVal sender As Object) _
      Implements IDeserializationCallback.OnDeserialization
      ' After being deserialized, initialize the m_area field  
      ' using the deserialized m_radius value.
      m_area = Math.PI * m_radius * m_radius
   End Sub 

   Public Overrides Function ToString() As String 
      Return String.Format("radius={0}, area={1}", m_radius, m_area)
   End Function 
End Class 

Class Class1
   <STAThread()> Shared Sub Main()
   End Sub 

   Shared Sub Serialize()
      Dim c As New Circle(10)
      Console.WriteLine("Object being serialized: " + c.ToString())

      ' To serialize the Circle, you must first open a stream for  
      ' writing. Use a file stream here. 
      Dim fs As New FileStream("DataFile.dat", FileMode.Create)

      ' Construct a BinaryFormatter and use it  
      ' to serialize the data to the stream. 
      Dim formatter As New BinaryFormatter
         formatter.Serialize(fs, c)
      Catch e As SerializationException
         Console.WriteLine("Failed to serialize. Reason: " + e.Message)
      End Try 
   End Sub 

   Shared Sub Deserialize()
      ' Declare the Circle reference 
      Dim c As Circle = Nothing 

      ' Open the file containing the data that you want to deserialize. 
      Dim fs As New FileStream("DataFile.dat", FileMode.Open)
         Dim formatter As New BinaryFormatter

         ' Deserialize the Circle from the file and  
         ' assign the reference to the local variable.
         c = CType(formatter.Deserialize(fs), Circle)
      Catch e As SerializationException
         Console.WriteLine("Failed to deserialize. Reason: " + e.Message)
      End Try 

      ' To prove that the Circle deserialized correctly, display its area.
      Console.WriteLine("Object being deserialized: " + c.ToString())
   End Sub 
End Class

.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
© 2015 Microsoft