CodeKicks.com
Focus on Microsoft Technologies - Tutorials, Articles, Code Samples.

Thursday, August 31, 2006

Object Serialization using C#

Introduction

Writing crucial data to the disk as TEXT is always dangerous. Any anonymous user can open the text file and easily read your data. With Object Serialization, you can reduce this danger to a certain extent. You can write any complex object directly to a filestream without converting values of individual properties into a text. You can make the data written, to the disk, atleast not human readable. In order for the users to read your data files, they have to use your program. Like a File Open command which you may provide in your application.

.NET and Object Serialization

Now what does .NET framework provide us to do Serialization of Custom-build class objects? With the advent of any programming language, developers would first look whether it is an OOPL. If so, how to create my own classes with my own properties and functions. And then comes inheritance and all others. Explaining how to create user-defined classes is out of scope of this article. But along the way you will get to know about what a user-defined class is.

Serialization explained

Serialization is the process of converting complex objects into stream of bytes for storage. Deserialization is its reverse process, that is unpacking stream of bytes to their original form. The namespace which is used to read and write files is System.IO. For Serialization we are going to look at the System.Runtime.Serialization namespace. The ISerializable interface allows you to make any class Serializable.

Here are the following steps that we are going to do to create a serializable class and test it.

  • Create a custom class named Employee and assign properties.
  • Define the serialization functions.
  • Create a main class and instantiate our Employee class.
  • Serialize the object to a sample file.
  • Deserialize the values by reading it from the file.

Defining Employee class and properties
   Our custom class Employee should be derived from the ISerializable interface and should hold the Serializable attribute. Here is the code snippet.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary; namespace MyObjSerial
{
    [Serializable()]    //Set this attribute to all the classes that want to serialize
    public class Employee : ISerializable //derive your class from ISerializable
    {
        public int EmpId;
        public string EmpName;
       
        //Default constructor
        public Employee()
        {
            EmpId = 0;
            EmpName = null;
        }
        }
}

, , ,

Post a Comment

Kanu said...

Thanks for the post it is really useful to me.