We have already seen how to serialize simple type objects like string, int etc etc, you must be wondering and asking yourself "Okay and So what???". Imagine you have a requirement where you need to store the class objects to a file, how would you do that? Thats exactly when you use serialization to store the class objects and de-serilization to retrieve those stored class object.
Am going to create a new console application and to my project on right in the solution explorer, go ahead and add a new item-->Class-->name it as Item.Our class will have two attributes name and price. To make a class serializable you need to include this [serializable]. Our class will have a constructor and a ToString() method which overrides the ToString Method from Object Base Class.
What are you waiting for? go ahead and create a class like this
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace serilizationexample
{
[Serializable]
public class Item
{
public string name;
public double price;
public Item(string _name, double _price)
{
name = _name;
price = _price;
}
public override string ToString()
{
return "The Item "+name+" would cost you " + price.ToString();
}
}
}
Lets go ahead and write this class object to a file. Open program.cs from console application project, and create a filestream like this:
FileStream fs = new FileStream(@"C:\Test.Sam", FileMode.Create);
This tell us that fs opens a file called Test.Sam from given location.To serialize the object we need to create binary formatter as follows:
BinaryFormatter bf = new BinaryFormatter();
Now you need to create an object from Item class like this:
Item ItemObj = new Item("Xbox", 325.00);
Once you have object created, lets serialize it before we can write it to a file
bf.Serialize(fs, ItemObj);
Great!!! Now you have written the object to the given file, go ahead take a look at the file that you created.To do that go to your file location(in my case its C:\), open Test.Sam with notepad. Lets read the file from our program and display it on the console. Create a streamreader object "sr" and read from the file like this:
StreamReader sr = new StreamReader(@"C:\Test.Sam");
string TextEntered = "";
string temp = "";
if ((temp = sr.ReadLine()) != null)
{
TextEntered = temp + sr.ReadLine();
}
Display the contents of the file on screen:
Console.WriteLine(TextEntered);
We are almost done now, go ahead and deserilialize the object from the file like this:
Item ItemRetrieved = (Item) bf2.Deserialize(fs2);
Now you have learned how to serialize and deserialize the class objects.
This is how your program.cs file should look like:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace serilizationexample
{
class Program
{
static void Main(string[] args)
{
FileStream fs = new FileStream(@"C:\Test.Sam", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
Item ItemObj = new Item("Xbox", 325.00);
bf.Serialize(fs, ItemObj);
fs.Close();
Console.WriteLine("Successfully wrote Obj to file press any key to Read the text from the file");
StreamReader sr = new StreamReader(@"C:\Test.Sam");
string TextEntered = "";
string temp = "";
if ((temp = sr.ReadLine()) != null)
{
TextEntered = temp + sr.ReadLine();
}
Console.WriteLine();
Console.WriteLine("Reading the contents of the file ...Press any key");
sr.Close();
Console.ReadKey();
Console.WriteLine();
Console.WriteLine(TextEntered);
FileStream fs2 = new FileStream(@"C:\Test.Sam", FileMode.Open);
BinaryFormatter bf2 = new BinaryFormatter();
Console.WriteLine();
Console.WriteLine("Deselerializing the contents from the file...");
Item ItemRetrieved = (Item) bf2.Deserialize(fs2);
string s2 = ItemRetrieved.ToString();
Console.WriteLine(s2);
Console.WriteLine();
Console.WriteLine("Press any key to exit");
Console.ReadKey();
fs2.Close();
}
}
}
If you need any help since you are totally new to all of this, then contact me and i will try to help you out.
Free MCTS EXAM training tutorials on this website, soon will be launching video tutorials for all the same topics
No comments:
Post a Comment