Pages

Wednesday, 30 April 2014

Serialize and Deserialize in C#

Hi,

Here you are gonna learn about Serialization & Deserialization in C#.DefinitionSerialization is the process of converting an object into a stream of bytes in order to store the object or transmit it to memory, a database, or a file. Its main purpose is to save the state of an object in order to be able to recreate it when needed. The reverse process is called Deserialization (From MSDN).DescriptionThis project serializes a list of names and saves it, then it deserializes the file and use it as required. so lets go;Steps1. Open Visual Studio -> New Project -> Windows Form Application with a name SerializeDeserialize2. Now follow the steps;

Add 1 combobox, 1 textbox, 2 labels and 1 button to your form

Change the combobox Name to ComboSavedListand textbox Name to txtNew (from properties dialog box)

Now design your form as shown in the below screenshot.

3. Now double click on the button Save and paste the below code

//checking if textbox contains text

if (txtNew.Text.Length > 0)

{

string FilePath = Path.Combine(Application.StartupPath, "Data.src");

string NewData = txtNew.Text;

//adding the new data to the list

Datalist.Add(NewData);

//Calling the Serialize function

Serialize(FilePath, Datalist);

//Deserializing the saved data

Deserialize(FilePath);

MessageBox.Show("Saved");

4. Also double click on the Formand paste the below code in Form_Load event handler

//Deserialize the file and load it on combobox on application startup

string FilePath = Path.Combine(Application.StartupPath, "Data.src");

if (File.Exists(FilePath))

Deserialize(FilePath);

5. Now update your Form.cs as shown in the below code

Form1.cs

using System;

using System.Collections.Generic;

using System.IO;

using System.Runtime.Serialization.Formatters.Binary;

using System.Windows.Forms;

namespace SerializeDeserialize

{

public partial class Form1 : Form

{

//String list for saving the data

List<string> Datalist = new List<string>();

public Form1()

{

InitializeComponent();

}

//Serialization

void Serialize(string FileName, object datalist)

{

try

{

//checking if file exists

if (File.Exists(FileName))

File.Delete(FileName);

using (FileStream fs = new FileStream(FileName, FileMode.Create))

{

BinaryFormatter bin = new BinaryFormatter();

bin.Serialize(fs, datalist);

fs.Close();

}

}

catch

{

}

}

//Deserialization

void Deserialize(string FileName)

{

try

{

if (File.Exists(FileName))

{

BinaryFormatter bin = new BinaryFormatter();

using (FileStream fs = new FileStream(FileName, FileMode.Open))

{

Datalist = (List<string>)bin.Deserialize(fs);

fs.Close();

}

//Setting the combobox source as Datalist

ComboSavedList.DataSource = Datalist;

}

}

catch

{

}

}

private void btnSave_Click(object sender, EventArgs e)

{

//checking if textbox contains text

if (txtNew.Text.Length > 0)

{

string FilePath = Path.Combine(Application.StartupPath, "Data.src");

string NewData = txtNew.Text;

//adding the new data to the list

Datalist.Add(NewData);

//Calling the Serialize function

Serialize(FilePath, Datalist);

//Deserializing the saved data

Deserialize(FilePath);

MessageBox.Show("Saved");

}

}

private void Form1_Load(object sender, EventArgs e)

{

string FilePath = Path.Combine(Application.StartupPath, "Data.src");

if (File.Exists(FilePath))

Deserialize(FilePath);

}

}

}

Code Explanation

On running the project, add names to the textbox (txtNew) and click on Save. The name will be listed in the combobox (comboSavedList).

On clicking the Save button, the data in the list (Datalist) is Serialized and saved in the Application's startup path with a name Data.src. (See the Screenshot below),Then the file is Deserialized and the names are listed in the combobox.

Also the file will be deserialized and loaded to the combobox on application startup.

Output

Run the project and enter names to the textbox and click on Save (Screenshot 1). See the name is listed in the combobox. Now restart the application, the combobox still holds the names (Screenshot 2).

Screenshot 1 : Saving the Data

Screenshot 2 : Saved data on application restart

Conclusion

Congrats, you have learned to Serialize and Deserialize in C#. Enjoy :-)