Serialization in C#
Serialization
is the process of converting an object into stream of bytes in order to persist
it to memory, a database or a file. Its main purpose is to save the state of an
object for the later uses when needed. The reverse process is call deserialization.
using System;
using System.IO;
using System.Xml.Serialization;
namespace SerializationTest
{
class Program
{
static void Main(string[] args)
{
//Serialization of String Object
string strobj = "test string for serialization";
FileStream stream = new FileStream("C:\\StrObj.txt", FileMode.Create, FileAccess.Write ,
FileShare.None);
XmlSerializer xmlserializer = new XmlSerializer(typeof(string));
xmlserializer.Serialize(stream, strobj);
stream.Close();
//Deserialization of String Object
FileStream readstream = new FileStream("C:\\StrObj.txt", FileMode.Open , FileAccess.Read ,
FileShare.Read );
string readdata = (string)xmlserializer.Deserialize(readstream);
readstream.Close();
Console.WriteLine(readdata);
Console.ReadLine();
}
}
}
Making an Object Serializable
To
serialize an object, we need an object to be serialized, a stream to contain
serialized object and a Formatter. For Serialization we are going to look at the System.Runtime.Serialization
namespace. The ISerializable interface allows
us to make any class Serializable.
We can serialize
our own class if we mark them with [Serializable] attribute. This
serializes all member of class, except those marked as [NonSerializable].
Types of Serialization
- Binary Serialization
- SOAP Serialization
- XML Serialization
Binary Serialization:-
Binary serialization is a mechanism which writes the data
to the output stream such that it can be used to re-construct the object
automatically. The term binary in its name implies that the necessary
information that is required to create an exact binary copy of the object is
saved onto the storage media. In Binary serialization the entire object state is saved
while in XML serialization only some of the object data is
saved.For
binary serialization we need to import System.Runtime.Serialization.Formatters.Binary
namespace. Following code serializes .NET string object by
using BinaryFormatter class.
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace SerializationTest
{
class Program
{
static void Main(string[] args)
{
//Serialization of String Object
string strobj = "test string for serialization";
FileStream stream = new FileStream("C:\\StrObj.txt", FileMode.Create, FileAccess.Write ,
FileShare.None);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, strobj);
stream.Close();
//Deserialization of String Object
FileStream readstream = new FileStream("C:\\StrObj.txt", FileMode.Open , FileAccess.Read ,
FileShare.Read );
string readdata = (string)formatter.Deserialize(readstream);
readstream.Close();
Console.WriteLine(readdata);
Console.ReadLine();
}
}
}
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace SerializationTest
{
class Program
{
static void Main(string[] args)
{
//Serialization of String Object
string strobj = "test string for serialization";
FileStream stream = new FileStream("C:\\StrObj.txt", FileMode.Create, FileAccess.Write ,
FileShare.None);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, strobj);
stream.Close();
//Deserialization of String Object
FileStream readstream = new FileStream("C:\\StrObj.txt", FileMode.Open , FileAccess.Read ,
FileShare.Read );
string readdata = (string)formatter.Deserialize(readstream);
readstream.Close();
Console.WriteLine(readdata);
Console.ReadLine();
}
}
}
SOAP Serialization:-
For communicating between applications having heterogeneous architecture SOAP protocol is ideal. In order to use SOAP serialization in .Net, we have to add a reference System.Runtime.Serialization.Formatters.Soap in application. The main advantage of SOAP serialization is its portability. The SoapFormatter serializes the object into SOAP messages or parses the SOAP messages and reconstruct the serialized object. Following code serializes .NET string object by using
SoapFormatter class.
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap ;
namespace SerializationTest
{
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap ;
namespace SerializationTest
{
class Program
{
static void Main(string[] args)
{
//Serialization of String Object
string strobj = "test string for serialization";
FileStream stream = new FileStream("C:\\StrObj.txt", FileMode.Create, FileAccess.Write ,
FileShare.None);
SoapFormatter formatter = new SoapFormatter();
formatter.Serialize(stream, strobj);
stream.Close();
//Deserialization of String Object
FileStream readstream = new FileStream("C:\\StrObj.txt", FileMode.Open , FileAccess.Read ,
FileShare.Read );
string readdata = (string)formatter.Deserialize(readstream);
readstream.Close();
Console.WriteLine(readdata);
Console.ReadLine();
}
}
}
XML Serialization:-
According to MSDN, "XML serialization converts (serializes) the public fields and properties of an object or the parameters and returns values of methods, into an XML stream that conforms to a specific XML Schema definition language (XSD) document. XML serialization results in strongly typed classes with public properties and fields that are converted to a serial format (in this case, XML) for storage or transport. Because XML is an open standard, the XML stream can be processed by any application, as needed, regardless of platform."
In order to use XML serialization, we have to add a reference System.XML. Serialization. The basic that we need to use for XML serialization is XmlSerializer. Following code serializes .NET string object by using XmlSerializer class.
using System;
using System.IO;
using System.Xml.Serialization;
namespace SerializationTest
{
class Program
{
static void Main(string[] args)
{
//Serialization of String Object
string strobj = "test string for serialization";
FileStream stream = new FileStream("C:\\StrObj.txt", FileMode.Create, FileAccess.Write ,
FileShare.None);
XmlSerializer xmlserializer = new XmlSerializer(typeof(string));
xmlserializer.Serialize(stream, strobj);
stream.Close();
//Deserialization of String Object
FileStream readstream = new FileStream("C:\\StrObj.txt", FileMode.Open , FileAccess.Read ,
FileShare.Read );
string readdata = (string)xmlserializer.Deserialize(readstream);
readstream.Close();
Console.WriteLine(readdata);
Console.ReadLine();
}
}
}
What is Formatters?
A Formatter is used to determine the serialization format for object. They are object that are used to serialize the the object into appropriate format before they are transmitted over the network. They exposes the IFormatter interface. There are two formatter classes provided within .NET, the BinaryFormatter
and the SoapFormatter. Both these classes extend the
IFormatter
interface.Use of Serialization
Serialization allows the developer to save the state of an object and recreate it as needed, providing storage of objects as well as data exchange. Through serialization, a developer can perform actions like sending the object to a remote application by means of a Web Service, passing an object from one domain to another, passing an object through a firewall as an XML string, or maintaining security or user-specific information across applications.
No comments:
Post a Comment