Serialization is the process of converting an object into a byte stream. Once serialized, it can be transmitted to a file, a database or to memory or send it across a network. For example, you may want to convert data to XML. Serialization allows you to store the state of the object; you can then recreate it as needed.
Let’s go through a simple example of serializing a Car object. First, we will need to create the Car class. Our Car will have make, model, year and color as properties. We will need to add [Serializable] to our class, or we will get an error that the class is not serializable later. Note we will also specify that the color property is not serializable:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Carl.SerializeConsoleApp { class Transportation { [Serializable] public class Car { public string make { get; set; } public string model { get; set; } public int year { get; set; } [NonSerialized] public string color; } } }
Now, we can add code to perform the serialization. We will use BinaryFormatter to serialize the object:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.Serialization.Formatters.Binary; using System.IO; namespace Carl.SerializeConsoleApp { class Program { static void Main(string[] args) { Transportation.Car car = new Transportation.Car(); car.make = "Toyota"; car.model = "Corolla"; car.year = 2009; car.color = "Blue"; BinaryFormatter bf = new BinaryFormatter(); FileStream fs = new FileStream("car.txt", FileMode.Create, FileAccess.Write, FileShare.None); try { using (fs) { bf.Serialize(fs, car); Console.WriteLine("Object has been serialized."); } Console.ReadLine(); } catch(Exception ex) { Console.WriteLine("An error has occurred: " + ex.ToString()); } } } }
On running this, we see the car.txt file is populated with the serialized object:
Now, we can deserialize the object:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.Serialization.Formatters.Binary; using System.IO; namespace Carl.SerializeConsoleApp { class Program { static void Main(string[] args) { FileStream fs = new FileStream("car.txt", FileMode.Open, FileAccess.Read, FileShare.None); try { using (fs) { Transportation.Car car = new Transportation.Car(); BinaryFormatter bf = new BinaryFormatter(); car = (Transportation.Car)bf.Deserialize(fs); Console.WriteLine("Object has been deserialized"); Console.WriteLine(car.make); Console.WriteLine(car.model); Console.WriteLine(car.color); Console.WriteLine(car.year); } Console.ReadLine(); } catch (Exception ex) { Console.WriteLine("An error has occurred: " + ex.ToString()); } } } }
Running this, notice the color is missing:
You can also serialize the object to other formats such as XML. To do this:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Runtime.Serialization.Formatters.Binary; using System.IO; namespace Carl.SerializeConsoleApp { class Program { static void Main(string[] args) { Transportation.Car car = new Transportation.Car(); car.make = "Toyota"; car.model = "Corolla"; car.year = 2009; car.color = "Blue"; System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(car.GetType()); FileStream fs = new FileStream("car.txt", FileMode.Create, FileAccess.Write, FileShare.None); try { using (fs) { x.Serialize(fs, car); Console.WriteLine("Object has been serialized."); } Console.ReadLine(); } catch(Exception ex) { Console.WriteLine("An error has occurred: " + ex.ToString()); } } } }
Which produces:
I AM SPENDING MORE TIME THESE DAYS CREATING YOUTUBE VIDEOS TO HELP PEOPLE LEARN THE MICROSOFT POWER PLATFORM.
IF YOU WOULD LIKE TO SEE HOW I BUILD APPS, OR FIND SOMETHING USEFUL READING MY BLOG, I WOULD REALLY APPRECIATE YOU SUBSCRIBING TO MY YOUTUBE CHANNEL.
THANK YOU, AND LET'S KEEP LEARNING TOGETHER.
CARL