Serializing & Deserializing Objects with VB.NET 2012


I don't need to tell most of you how important serialization is in your programs. If today is the first time you come across the term Serialization, I'd suggest reading here before continuing.

Being able to serialize and deserialize information in your apps is a very important feature to have. Being able to save and load information stored is crucial. There are many ways to serialize data, but it all depends on your program's needs. You can serialize info into and from the registry; you can store and load info from a database, or from a file. Today we will save info to an xml file and load it from that xml file.


We will be using a very basic design, have a look at Figure 1, and design your form similar to it.

Our Design
Figure 1 - Our Design


I decided that instead of serializing basic tidbits of data, to throw a spanner in the works and demonstrate how to save real objects created from code. For this demonstration we will create a new class called clsStudent and give it some properties. These properties will be the information we will serialize. Let us add a new class now, and edit its code.


Add the necessary namespace(s), in General Declarations:

Imports System.Xml.Serialization 'The Serialization namespace contains classes that are used to serialize objects into XML format documents or streams

Now, let us add the Student Class' member variables:

    Private strName As String 'Name Member Variable
    Private strCourse As String 'Course Member Variable
    Private intStuNo As Integer 'StudentNumber Member Variable

The above member variables will be used in conjunction with our class' properties (which we will add now) to get and set their values. Let us add the Properties now.

    'Gets / Sets Student Name
    Public Property StudentName() As String


            StudentName = strName

        End Get

        Set(ByVal Value As String)

            strName = Value

        End Set

    End Property

    'Gets / Sets Student's Course
    Public Property StudentCourse() As String


            StudentCourse = strCourse

        End Get

        Set(ByVal Value As String)

            strCourse = Value

        End Set

    End Property

    'Gets / Sets StudentNumber
    <XmlElementAttribute(ElementName:="Student Number")> _
    Public Property StudentNumber() As Integer


            StudentNumber = intStuNo

        End Get

        Set(ByVal Value As Integer)

            intStuNo = Value

        End Set

    End Property

You can probably tell what the above code does. We simply give our Student class some properties. These properties include StudentName (for the Student's name), StudentCourse (what course the student does) and StudentNumber (the student's student number).

We need to connect our student class, and from there populate it with our form's controls. Finally, we must serialize and deserialize the entered info.

frmSD ( or However You Named It )

Let us start with the namespaces again. I always start with the namespaces - old habits die hard I suppose. Add the following two namespaces to your form's general declarations section:

Imports System.IO 'File Input & Output
Imports System.Xml.Serialization 'The Serialization namespace contains classes that are used to serialize objects into XML format documents or streams

Let us now add the serialization code:

    Private Sub btnS_Click(sender As Object, e As EventArgs) Handles btnS.Click

        'Instantiate new Student object
        Dim stu As New clsStudent()

        'Information to save
        stu.StudentName = txtName.Text
        stu.StudentCourse = txtCourse.Text
        stu.StudentNumber = Convert.ToInt16(txtStuNum.Text)

        'Serialize student object to an XML file, via the use of StreamWriter
        Dim objStreamWriter As New StreamWriter("C:\StudentInfo.xml")

        Dim xsSerialize As New XmlSerializer(stu.GetType) 'Determine what object types are present

        xsSerialize.Serialize(objStreamWriter, stu) 'Save

        objStreamWriter.Close() 'Close File

    End Sub

We created a new clsStudent object, and populated it with whatever data was entered into the textboxes. Note, if you have named your objects differently, you will have to compensate for that in your code.

We then created a StreamWriter object, which will create our file on the C drive, called StudentInfo.xml.

We created an XmlSerializer object that will facilitate in the serializing of our data. Lastly we wrote our entered data, and closed the file.

Let us add the Deserialization code:

    Private Sub btnD_Click(sender As Object, e As EventArgs) Handles btnD.Click

        'Deserialize XML file to a new Student object.
        Dim objStreamReader As New StreamReader("C:\StudentInfo.xml") 'Read File

        Dim stu As New clsStudent() 'Instantiate new Student Object

        Dim xsDeserialize As New XmlSerializer(stu.GetType) 'Get Info present

        stu = xsDeserialize.Deserialize(objStreamReader) 'Deserialize / Open

        objStreamReader.Close() 'Close Reader

        'Display values of the new student object
        txtName.Text = stu.StudentName
        txtCourse.Text = stu.StudentCourse
        txtStuNum.Text = CStr(stu.StudentNumber)

    End Sub

Same principle as the serialization, but we just load the info with the help of the Deserialize method of the XmlSerializer object and load the info into our textboxes.

If you run your project now, you will be able to save your entered data, and then load them. I am including the source files below.


As always, (you may say that I sound like a broken record sometimes - blame it on my O. C. D.) I hope you have enjoyed this little article, and that you have learned something from it. Until next time! Cheers! - I always say that too...

Related Articles



  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • On-demand Event Event Date: February 12, 2015 The evolution of systems engineering with the SysML modeling language has resulted in improved requirements specification, better architectural definition, and better hand-off to downstream engineering. Agile methods have proven successful in the software domain, but how can these methods be applied to systems engineering? Check out this webcast and join Bruce Powel Douglass, author of Real-Time Agility, as he discusses how agile methods have had a tremendous …

  • The mobile market is white hot. Building a well-crafted product development plan that addresses market research, strategy, design, and development will provide the greatest chance for success. Each phase of an app's lifecycle is critical to the its overall success and feeds into the next step of the process of product development for the app. This white paper examines the five key phases of mobile app creation, one by one, to understand how they work together to help create a successful mobile app.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date