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 تشکر