Serialization و Deserialization در#C
سه شنبه 12 مرداد 1395در این مقاله شما در مورد Serialization و DeSerialization در #C مطالبی را خواهید آموخت . همچنین در این مقاله با BinaryFormat و XMLFormat آشنا می شویم .
Serialization چیست ؟
Serialization ، فرآیند آوردن شئ به یک فرم است که این شئ میتواند روی یک رشته (Stream) نوشته شده باشد . یک فرآیند تبدیل شئ به یک فرم است بنابراین آن میتواند روی یک فایل ، پایگاه داده یا حافظه ذخیره شده باشد ، این قابلیت رو دارد که از طریق شبکه منتقل و جا به جا شود . هدف اصلی آن ذخیره سازی وضعیت شئ است بنابراین زمانی که نیاز باشد میتواند دوباره ساخته شود .
Deserialization چیست ؟
همانطور که از نام آن پیدا است ، Deserialization برعکس فرآیند Serialization است . فرآیند برگرداندن فایل های Serialized است بنابراین میتواند توی حافظه بارگذاری شود . تنظیم خصوصیات شئ ، آن را دوباره بازسازی میکند و غیره .
انواع :
• Binary Serialization
• XML Serrialization
• JSON serialization
مثال :
در اینجا مثالی مطرح خواهیم کرد که چگونگی Serialization و Deserialization یک شئ را با استفاده از فرمت Binary و فرمت XML نشان میدهد .
یک پروژه Windows Form Application بسازید و همانند تصویر زیر تعدادی کنترل به آن اضافه کنید :
حالا کلاسی با نام Employee میسازیم :
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApplication1 { [Serializable] public class Employee { private string Name; public string name { get { return Name; } set { Name = value; } } private string Phone; public string phone { get { return Phone; } set { Phone = value; } } private DateTime DoB; public DateTime dob { get { return DoB; } set { DoB = value; } } private string Department; public string department { get { return Department; } set { Department = value; } } private int Salary; public int salary { get { return Salary; } set { Salary = value; } } [NonSerialized] public string additionalInfo; } }
[Serialization ] را در بالای کلاس قرار می دهیم . برای آن صفاتی که شما قصد Serialize کردن آنها رو ندارید ، [NonSerialization] را بالای آنها قرار می دهیم .
یک event برای دکمه Serilize اضافه کنید . هدف از این کار این است که وقتی ما بر روی دکمه Serialize کلیک می کنیم شئ های کلاس Employee را Serialize کند و در فایلی با نام Employee.binary ذخیره شوند .
private void Serialize_Click(object sender, EventArgs e) { Employee emp = new Employee { name = textBoxName.Text, phone = textBoxPhone.Text, dob = dateTimePickerDoB.Value, department = textBoxDepartment.Text, salary = Convert.ToInt32(textBoxSalary.Text), additionalInfo = "We don't want it to serialize" }; BinaryFormatter bf = new BinaryFormatter(); FileStream fsout = new FileStream("employee.binary", FileMode.Create, FileAccess.Write, FileShare.None); try { using (fsout) { bf.Serialize(fsout, emp); label6.Text = "Object Serialized"; } } catch { label6.Text = "An error has occured"; } }
از BinaryFormatter برای Serialized کردن شئ با BinaryFormat استفاده می کنیم . با استفاده از FileStream یک فایل با نام Employee.binary بسازید . درون این فایل شئ Serilize شده ما ذخیره می شود.
bf.Serialize(fsout,emp شئ emp را serialize و آن را درون employee.binary ذخیره خواهد کرد .
مرحله بعدی نوشتن کد برای Deserialize کردن شئ است . یک event برای دکمه Deserialize اضافه کنید .هدف از این کار این است که بعد از کلیک کردن بر روی دکمه ، شئ ما Desrialize و بر روی صفحه نمایش داده شود .
private void Deserialize_Click(object sender, EventArgs e) { Employee emp = new Employee(); BinaryFormatter bf = new BinaryFormatter(); FileStream fsin = new FileStream("employee.binary", FileMode.Open, FileAccess.Read, FileShare.None); try { using (fsin) { emp = (Employee) bf.Deserialize(fsin); label6.Text = "Object Deserialized"; textBoxName.Text = emp.name; textBoxPhone.Text = emp.phone; dateTimePickerDoB.Value = emp.dob; textBoxDepartment.Text = emp.department; textBoxSalary.Text = emp.salary.ToString(); } } catch { label6.Text = "An error has occured"; } }
از BinaryFormatter برای Deserialize کردن شئ درون فایل employee.binary استفاده کنید . بعد از اینکه شئ Deserialized شد ، مقادیر TextBoxها را آپدیت می کنیم .
حالا اجازه دهید برنامه را اجرا کنیم و مقدار دهی کنیم ، مقادیر textBoxهای ما همانند زیر میشود :
بر روی Serialize کلیک می کنیم :
پیام ، نشان میدهد که فایل ما Serialize شده ، برای اطمینان از این امر آدرس زیر را چک میکنیم
WindowsFormsApplication\WindowsFormsApplication\bin\Debug\employee.binary
در اینجا شما فایل را پیدا خواهید کرد :
حالا برای Deserialize کردن فایل ، مقادیر TextBox ها را پاک کرده و تاریخ را نیز تغییر می دهیم :
بر روی Deserialize کلیک کنید ، مقادیر زیر را دریافت خواهید کرد :
Serialize کردن شی در فرمت XML ،
برای این کار به جای استفاده از BinaryFormatter از XmlSerializer استفاده میکنیم :
XmlSerializer xs = new XmlSerializer(typeof(Employee));
نام فایل را از employee.binary به employee.xml تغییر دهید ،
و به جای [Nonserialized] از [Xmlgnore] استفاده کنید ، بقیه کد ها مشابه یکدیگر هستند .
آموزش سی شارپ
- C#.net
- 7k بازدید
- 8 تشکر