الـ Serialization في الدوت نت

23 سبتمبر 2016     513 مشاهدة    0 تعليق
تم النشر في #Serialization  #.NET 

ما المقصود بمفهوم الـ Serialization؟ الـ Serialization هي عملية تحويل الكائن إلى سيل أو تدفق من البيانات بحيث يسهل نقلها عبر الشبكة أو خزنها في الذاكرة أو قاعدة بيانات أو ملف.

إن الغرض الأساسي من الـ Serialization هو حفظ حالة الكائن بحيث يسهل إنشاؤه في الوقت الذي نحتاج. والعملية العكسية للـ Serialization هي الـ Deserialization.

فعن طريق هذا المفهوم يستطيع المطورون من إرسال الكائنات من جهاز لآخر بإستخدام خدمات الويب, حيث يتم نقل الكائن - حتى في وجود جدار ناري - على صورة نص XML.

ويتم عمل الـ Serialization بطريقتين : Basic حيث تقوم الدوت نت أوتوماتيكاُ بعمل الـ Serialization وذلك بإستخدام الـ SerializableAttribute والفئات التي سيتم ذكرها لاحقاٌ. والنوع الآخر Custom حيث يتم إستخدام نفس الخاصية السابقة للنوع الأول بالإضافة إلى كيفية عمل الـ Serialization, وذلك بتطبيق الواجهه ISerializable.

قدمت لنا الدوت نت نوعين أساسيين من أنواع الـ Serialization وهما:

1- Binary Serialization
في هذا النوع يتم إستخدام الترميز الثنائي ليتم حفظها أو إرسالها في NetworkStream. ويحتوي فضاء الأسماء System.Runtime.Serialization.Formatters.Binary على جميع الفئات التي تساعدك في عملية الـ Serialization والـ Deserialization للكائنات.

2- XML Serialization
في هذا النوع يتم حفظ المتغيرات, والخواص العامة Public, وكذلك وسائط الإجراءات والدوال والقيم المرجعة على هئية XML. ويحتوي فضاء الأسماء System.Xml.Serialization على جميع الفئات التي تساعدك في عملية الـ Serialization والـ Deserialization للكائنات.

وبعد أن تعرفنا على أنواع الـ Serialization دعونا نستعرض مثال يبين طريقة إستخدامها, فلنفترض لدينا الفئة Person على النحو التالي:

[Serializable]  
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}

فتم تعليم الفئة بإستخدام الخاصية Serializable لنخبر الدوت نت أن أي كائنات من هذه الفئة قابلة لعملية الـ Serialization. ومن ثم نقوم بعملية الـ Serialization على النحو التالي:

var person = new Person();  
person.FirstName = "John";
person.LastName = "Smith";
person.Age = 24;
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("People.bin", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, person);
stream.Close();

طبعاُ إستخدمنا في مثالنا الـ BinaryFomatter يمكننا إستخدام الـ XmlFormatter بنفس الأسلوب, مع الكتابة في ملف XML. ويمكننا إستخدام الـ Deserialization بعكس الطريقة السابقة.

IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("People.bin", FileMode.Open, FileAccess.Read, FileShare.Read);
var person = (Person) formatter.Deserialize(stream);
stream.Close();

Console.WriteLine("First Name: {0}", person.FirstName);
Console.WriteLine("Last Name: {0}", person.LastName);
Console.WriteLine("Age: {0}", person.Age);

بهذا نكون قد تعرفنا على معلومات أساسية عن مفهوم الـ Serialization في الدوت نت, وهذا ليس كل شيء, يمكنك القراءة والإطلاع أكثر للتعرف على المزيد.

وأريد أن أذكر للفائدة أن هنالك نماذج أخرى للـ Serialization في الدوت نت مثل الـ SoapFormatter والـ LosFormatter والـ CodeDomSerializer وهم خارج نطاق موضوع مقالتنا.

تويتر فيسبوك قوقل + لينكد إن


اكتب تعليقك