Jan 1, 2017

Serialization နှင့် Deserialization ဆိုတာဘာလဲ။

Ko Sagaing
Serialization ဆိုတာ Object တစ်ခုကို Bytes Stream သို့ပြောင်းလဲလုပ်ဆောင်ခြင်းကို ခေါ်ပြီး၊ Deserialization ဆိုတာကတော့ Bytes Stream မှ Object သို့ ပြန်လည်ပြောင်းလဲခြင်းကို ခေါ်ပါတယ်။ ဒီနေရာမှာ Object တစ်ခုဆိုတာ အဓိကအားဖြင့် Data Structure တစ်ခုကိုပြောတာဖြစ်ပါတယ်။ ကျွန်တော်တို့ Programming မှာ Object တစ်ခုကို Memory ထဲမှာ လိုသလို ကိုင်တွယ်၊ လုပ်ဆောင်နိုင်ပေမယ့် အဲ့ဒီ Object ထဲက Data တွေကို သိမ်းဆည်းတဲ့အလုပ် (သို့) Network ထဲကို ပေးပို့တဲ့အလုပ် စသည်တို့ကို လုပ်ချင်တဲ့အခါမှာ Bytes Stream ပုံစံကို ပြောင်းလဲမှသာလျှင် လုပ်ဆောင်နိုင်မှာ ဖြစ်ပါတယ်။  Bytes Stream ဆိုတာ နောက်ပိုင်းမှာ ပြန်လည်အသုံးချလို့ရမယ့် ဥပမာ XML (သို့) JSON ကဲ့သိုသော ပုံစံမျိုးကိုပြောတာ ဖြစ်ပါတယ်။  အောက်မှာ နမူနာ Code ကို C# နှင့် ရေးသားထားပါတယ်။ ဒီ Code ထဲမှာ Object မှ XML ကို အပြန်အလှန် Serialize/Deserialize လုပ်ထားတယ်။  နောက်ပြီး Object မှ JSON ကို အပြန်အလှန် Serialize/Deserialize လုပ်ထားတယ်။  .Net မှာ JSON ကို Serialize/Deserialize လုပ်နိုင်တဲ့ Class ၃ခု ရှိတယ်။

JavaScriptSerializer
DataContractJsonSerializer
Json.NET

အဲ့ဒီထဲကမှ Json.Net ကိုသုံးထားတယ် ဘာလို့လည်းဆိုတော့ ရေးရတာလွယ်ပြီး၊ မြန်တဲ့အတွက်ကြောင့် ဖြစ်တယ်။ Json.Net ကိုသုံးမယ်ဆိုရင် Nuget Package ထဲကိုသွားပြီး Json.Net Library ကို Project ထဲမှာ Install လုပ်ပေးဖို့လိုတယ်။ ဒီနမူနာ Code မှာ Employee တွေထည့်ထားတဲ့ List ထဲက Data တွေကို Serialize/Deserialize လုပ်ထားတယ်။ နောက်ပြီး Code ထဲမှာ T ဆိုတာ သုံးထားတယ် T ကဘာလည်းဆိုတော့ Generic Type Parameters ဖြစ်တယ်။  သူ့ရဲ့သဘောတရားက ယေဘူယသတ်မှတ်ချင်တဲ့ Collection Class တွေကို ကိုယ်စားပြုတာပဲဖြစ်တယ်။ ဒီ ဥပမာထဲမှာဆိုရင် T ကို Pass လုပ်မယ့် Class က List နှင့် ၄င်းထဲမှာရှိတဲ့  Employee တွေဖြစ်တယ်။  T က Generic ဖြစ်တဲ့အတွက် အဲ့ဒီနေရာမှာ List မပါပဲ Employee Class တစ်ခုတည်းပဲ Pass လုပ်လည်းရတယ်။

using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Serialization;
using System;
using Newtonsoft.Json;

namespace SerializationDeserialization

{
    class Program
    {
        static void Main(string[] args)
        {
            List employees = new List()
            {
                new Employee() { Id=1, Name="Maung Maung", Title="Manager", DOB="12/1/1986", Address="Mandalay" },
                new Employee() { Id=2, Name="Kyaw Kyaw", Title="Programmer", DOB="3/4/1975", Address="Yangon" },
                new Employee() { Id=3, Name="Mya Mya", Title="System Analyst", DOB="8/5/1987", Address="Taung Gyi" }
            };

            XMLSerializeDeserialize> XMLSerializeEmployees = new XMLSerializeDeserialize>();

            string xmlserializedData = XMLSerializeEmployees.SerializeData(employees);
            Console.WriteLine("----------XML Serialize Data----------");
            Console.WriteLine(xmlserializedData);

            List xmldeserializedData = XMLSerializeEmployees.DeserializeData(xmlserializedData);

            Console.WriteLine("----------XML Deserialize Data----------");
            foreach (var emp in xmldeserializedData)
            {
                Console.WriteLine("Id : {0}\nName : {1}\nTitle : {2}\nDOB : {3}\nAddress : {4} ", emp.Id, emp.Name, emp.Title, emp.DOB, emp.Address);
                Console.WriteLine("------------------------------------------------------------");
            }

            JSOSerializeDeserialize> JsonSerializeEmployees = new JSOSerializeDeserialize>();

            string jsonserializedData = JsonSerializeEmployees.SerializeData(employees);
            Console.WriteLine("----------JSON Serialize Data----------");
            Console.WriteLine(jsonserializedData);

            List jsodeserializedData = JsonSerializeEmployees.DeserializeData(jsonserializedData);

            Console.WriteLine("----------JSON Deserialize Data----------");
            foreach (var emp in xmldeserializedData)
            {
                Console.WriteLine("Id : {0}\nName : {1}\nTitle : {2}\nDOB : {3}\nAddress : {4} ", emp.Id, emp.Name, emp.Title, emp.DOB, emp.Address);
                Console.WriteLine("------------------------------------------------------------");
            }

            Console.ReadLine();

        }
    }

    public class Employee

    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Title { get; set; }
        public string DOB { get; set; }
        public string Address { get; set; }
    }

    public class XMLSerializeDeserialize

    {
        //XML Class
        XmlSerializer xmlSerializer;
        XmlDocument xDocument;
        XmlNodeReader xNodeReader;
        //String Class
        StringBuilder sbData;
        StringWriter swTextWriter;

        //Serialize XML string (T = Generic Type Parameter)

        public string SerializeData(T data)
        {
            sbData = new StringBuilder();
            swTextWriter = new StringWriter(sbData);
            XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
            xmlSerializer.Serialize(swTextWriter, data);
            return sbData.ToString();
        }

        //Deserialize T object

        public T DeserializeData(string xmldata)
        {
            xDocument = new XmlDocument();
            xDocument.LoadXml(xmldata);
            xNodeReader = new XmlNodeReader(xDocument.DocumentElement);
            xmlSerializer = new XmlSerializer(typeof(T));
            var objData = xmlSerializer.Deserialize(xNodeReader);
            T deserializedData = (T)objData;
            return deserializedData;
        }
    }

    //Newtonsoft.Json NeNuGet Package need to install

    public class JSOSerializeDeserialize
    {
        //Serialize JSON string (T = Generic Type Parameter)
        public string SerializeData(T data)
        {
            string jsonData = JsonConvert.SerializeObject(data);
            return jsonData;
        }

        //Deserialize T object

        public T DeserializeData(string jsondata)
        {
            var objData = JsonConvert.DeserializeObject(jsondata);
            T deserializedData = (T)objData;
            return deserializedData;
        }
    }

}

မှတ်စုရေးသူအကြောင်း

Ko Sagaing / Software Engineer

နာမည်အရင်းမှာ လှိုင်မင်းထက်ဖြစ်ပြီး၊ ကိုစစ်ကိုင်းဆိုသည့် နာမည်ပြောင်နှင့် မိတ်ဆွေ၊ သူငယ်ချင်းများက ရင်းနှီးစွာခေါ်ကြပါသည်။ ယခင်ကမြန်မာနိုင်ငံတွင် သင်ကြားရေး နှင့် Software Development လုပ်ငန်းများတွင် ဝင်ရောက်လုပ်ကိုင်ခဲ့ပြီး၊ ယခုလက်ရှိမှာ စင်ကာပူနိုင်ငံရှိ နည်းပညာကုမ္ပဏီတစ်ခုတွင် ဝင်ရောက်လုပ်ကိုင်နေပါသည်။

0 ခုမှတ်ချက်ပေးထားတယ်။:

Post a Comment

ကိုစစ်ကိုင်း၏ မှတ်စုများ. Powered by Blogger.