Tuesday, December 3, 2013

Serialization and De serialization

Serialization and De serialization:
After a large R&D,Googling I have minimized and prepared good stuff to understand about this topic in short time with best way.
In simple words we can say an object conversion in text stream is serialization and text stream conversion in object of a class is called deserialization. 

There are different types of serialization in .net SOAP,XML,Binary,Custom,JSON etc.
which can be understood by you in a single look with the below examples.
 class Program
    {
        static void Main(string[] args)
        {
             TestSimpleObject obj = new TestSimpleObject();

             Console.WriteLine("Before serialization the object contains: ");
            obj.Print();

            //SOAP Serialization
            SoapFormatter soapformatter = new SoapFormatter();
            using (FileStream writer1 = File.Open("D://dataSoap.xml", FileMode.Create))
            {
                soapformatter.Serialize(writer1, obj);
                Console.WriteLine("\nSoap Serialization is Success..\n");
                writer1.Close();
            }

            //XML Serialization
            XmlSerializer xmlformatter = new XmlSerializer(obj.GetType());
            using (StreamWriter writer2 = new StreamWriter(@"D:\dataXML.xml"))
            {
                xmlformatter.Serialize(writer2, obj);
                Console.WriteLine("XML Serialization is Success..\n");
                writer2.Close();
            }

            //Binary Serialization
            BinaryFormatter binaryformatter = new BinaryFormatter();
            using (FileStream writer3 = new FileStream(@"D:\dataBinary.dat", FileMode.Create))
            {
                binaryformatter.Serialize(writer3, obj);
                Console.WriteLine("Binary Serialization is Success..\n");
                writer3.Close();
            }

             //Binary Deserialization
             using (var fs = new FileStream(@"D:\dataBinary.dat", FileMode.Open))
            {
                obj = (TestSimpleObject)new BinaryFormatter().Deserialize(fs);
                Console.WriteLine("\nAfter binary deserialization the object contains:  ");
                 Console.Write(obj.member1 + "\n" + obj.member2 + "\n" + obj.member3 + "\n" + obj.member4 + "\n" + obj.member5);
                fs.Close();
            }

            //SOAP DeSerialization
            using (var fs = new FileStream(@"D://dataSoap.xml", FileMode.Open))
            {
                obj = (TestSimpleObject)soapformatter.Deserialize(fs);
                Console.WriteLine("\nAfter soap deserialization the object contains:  ");
                Console.Write(obj.member1 + "\n" + obj.member2 + "\n" + obj.member3 + "\n" + obj.member4 + "\n" + obj.member5);
                fs.Close();
            }

            //XML DeSerialization
            using (var fs = new FileStream(@"D://dataXML.xml", FileMode.Open))
            {
                obj = (TestSimpleObject)xmlformatter.Deserialize(fs);
                Console.WriteLine("\nAfter XML deserialization the object contains: ");
                Console.Write(obj.member1 + "\n" + obj.member2 + "\n" + obj.member3 + "\n" + obj.member4 + "\n" + obj.member5);
             }
            Console.Read();
        }
    }

     // A test object that needs to be serialized.
    [Serializable()]
    public class TestSimpleObject

    {

        public int member1;
        public string member2;
         public string member3;
         public double member4;
         public string member5;

        public TestSimpleObject()
        {
             member1 = 11;
            member2 = "hello";
            member3 = "hello";
            member4 = 3.14159265;
            member5 = "hello world!";
        }
   
        public void Print()
        {
            Console.WriteLine("member1 = '{0}'", member1);
            Console.WriteLine("member2 = '{0}'", member2);
            Console.WriteLine("member3 = '{0}'", member3);
            Console.WriteLine("member4 = '{0}'", member4);
            Console.WriteLine("member5 = '{0}'", member5);
        }
    }

 
Out Put Window:(serialized files will be generated in D Drive)
   


Json Serialization:
below method returns json format to datatable:

    public string ConvertDataTableJSON()
    {
        DataTable dt = new DataTable();
        using (SqlConnection con = new SqlConnection("Data Source=.;uid=sa;pwd=yourpassword;database=yourdb"))
        {
            using (SqlCommand cmd = new SqlCommand("select * from customer_orders", con))
            {
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
                System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
                List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
                Dictionary<string, object> row;
                foreach (DataRow dr in dt.Rows)
                {
                    row = new Dictionary<string, object>();
                    foreach (DataColumn col in dt.Columns)
                    {
                        row.Add(col.ColumnName, dr[col]);
                    }
                    rows.Add(row);
                }
                return serializer.Serialize(rows);
            }
        }
    }


output returns:Json Formatted DataTable
[{"Cust_ord_id":1,"Customer_Name":"Customer 1","Order_ID":1,"Product_Name":"Product 1","Product_Qty":4},{"Cust_ord_id":2,"Customer_Name":"Customer 1","Order_ID":1,"Product_Name":"Product 2","Product_Qty":5}] 

suggested links:very in details xml serialization:
http://www.codeproject.com/Articles/483055/XML-Serialization-and-Deserialization-Part-1
 
 

No comments: