hamidreza20
شنبه 26 دی 1388, 15:11 عصر
Serialize و Deserialize
در این مقاله سعی می کنیم که یکی از اصلی ترین روش های ذخیره و بازیابی داده ها را معرفی کنیم .آیا تا به حال یک سیب زمینی را درون ماکروفر قرار داده اید تا پخته شود و آیا تا به حال یک سیب زمینی پخته را درون دستگاه دیگری قرار داده اید تا همان سیب زمین اول شود.
مثلماً پاسخ شما برای آیای اول مثبت و پاسخ شما برای آیای دوم یک نگاه معنی دار خواهد بود!
کار اول یعنی پختن سیب زمینی معادل عمل Serialize نمودن داده ها و کار دوم معادل Desterilize نمودن داده ها در .NET Framework می باشد.
با Serialize نمودن داده ها می توانیم آنها را در مکان های مانند فایل ، جداول پایگاه داده و یا memory buffer نگه داری کنیم و با Desterilize نمودن آنها می توانید داده ها را از مکانهای ذکر شده فراخوانی نماییم.
اگر بخواهیم مثالی برای Serialize و Desterilize داده ها بزنیم می توانید به ذخیره شدن یک فایل text از notepad و بازخوانی آن از دیسک برای نمایش مجدد اشاره نماییم، که کاملاً مشابه با فرایند Serialize و Deserialize داده ها می باشد.
از نمونه استفاده های دیگر این فرایند می توانم به موارد زیر اشاره نمایم.
1- نگه داری وضعیت یک نرم افزار (Application State Saving)
2- Copy & Paste
3- Clone Object کپی آبجکت
4- Share Object over network ارسال اطلاعات در شبکه
5- Encrypt compress objectرمز نگاری و رمز گشایی اطلاعات
Serialize: فرآیندی برای تبدیل یک آبجکت و یا گرافی متشکل از چند آبجکت به یک حالت خطی (و جریان وار) از بایت ها برای انتقال و یا ذخیره سازی در محلی دیگر است.
Deserialize : عمل برعکس سریالیزشین است؛ یعنی دوباره ساختن آبجکت از روی جریانی از بایتها .
انواع فرمت ها در سریالیزشین :
1- Binary : بصورت باینری سریالایز میکند. (فشرده ترین و efficient ترین حالت است)
SOAP -2 : بصورت soap سریالایز میکند. (برای ارسال در شبکه و جایی که از تحت دات نت بودن کلاینتها مطمئن نیستیم)
XML -3 : بصورت xml سریالایز میکند. (برای ارسال تحت شبکه - مزیت : خوانایی)
برخی از موارد کاربرد سریالزیشین:
1- کپی یک انشعاب از آبجکتها
2- انتقال اطلاعات در شبکه
3- نگهداری state ها و snapshot های مختلف در یک برنامه (برای موارد حساس : مثل تراکنشهای بانکی و ...)
4- پیاده سازی Deep Copy و Shallow Copy
برای استفاده از Serialize می بایست Namespace
using System.Runtime.Serialization.Formatters.Binary;
، و برای کار با فایل از Namespace ،System.IO در پروژه استفاده می نماییم.
در پروژه مان می خواهیم طول و عرض فرممان را در هنگام بستن فرم Serialize نماییم و در هنگام باز شدن مجدد فرم آنها را Deserialize و استفاده نماییم.
در رویداد FormClosing کد زیر را می نویسیم
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
ArrayList arr = new ArrayList();
arr.Add(this.Width);
arr.Add(this.Height);
FileStream fs = new FileStream("C:\\Test.dat", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, arr);
}
در این قطعه کد با قرار دادن عرض و ارتفاع فرم در یک ArrayList و ایجاد یک فایل به نام Test.dat توسط شی BinaryFormatter شی arraylist را در فایل Serialize می نماییم.
حال برای Deserialize اطلاعات قطعه کد زیر را در رویداد Load فرم می نویسم، دقت شود که قرار دادن کد در try catch به منظور جلوگیری از رویداد خطا در هنگام load اول فرم و عدم وجود فایل test.dat می باشد.
private void Form1_Load(object sender, EventArgs e)
{
try
{
using (FileStream fs = new FileStream("C:\\Test.dat", FileMode.Open))
{
BinaryFormatter bf = new BinaryFormatter();
ArrayList ar = (ArrayList)bf.Deserialize(fs);
this.Width = (int)ar[0];
this.Height = (int)ar[1];
}
}
catch { }
}
حال با اجرا فرم و تغییر سایز آن در صورتی که فرم را دوباره باز نماییم سایز آن به میزان سایز فرم قبل از بسته شدن خواهد بود.
التماس دعا...
اگه مفید بود خواستید تشکر بزنید...
در این مقاله سعی می کنیم که یکی از اصلی ترین روش های ذخیره و بازیابی داده ها را معرفی کنیم .آیا تا به حال یک سیب زمینی را درون ماکروفر قرار داده اید تا پخته شود و آیا تا به حال یک سیب زمینی پخته را درون دستگاه دیگری قرار داده اید تا همان سیب زمین اول شود.
مثلماً پاسخ شما برای آیای اول مثبت و پاسخ شما برای آیای دوم یک نگاه معنی دار خواهد بود!
کار اول یعنی پختن سیب زمینی معادل عمل Serialize نمودن داده ها و کار دوم معادل Desterilize نمودن داده ها در .NET Framework می باشد.
با Serialize نمودن داده ها می توانیم آنها را در مکان های مانند فایل ، جداول پایگاه داده و یا memory buffer نگه داری کنیم و با Desterilize نمودن آنها می توانید داده ها را از مکانهای ذکر شده فراخوانی نماییم.
اگر بخواهیم مثالی برای Serialize و Desterilize داده ها بزنیم می توانید به ذخیره شدن یک فایل text از notepad و بازخوانی آن از دیسک برای نمایش مجدد اشاره نماییم، که کاملاً مشابه با فرایند Serialize و Deserialize داده ها می باشد.
از نمونه استفاده های دیگر این فرایند می توانم به موارد زیر اشاره نمایم.
1- نگه داری وضعیت یک نرم افزار (Application State Saving)
2- Copy & Paste
3- Clone Object کپی آبجکت
4- Share Object over network ارسال اطلاعات در شبکه
5- Encrypt compress objectرمز نگاری و رمز گشایی اطلاعات
Serialize: فرآیندی برای تبدیل یک آبجکت و یا گرافی متشکل از چند آبجکت به یک حالت خطی (و جریان وار) از بایت ها برای انتقال و یا ذخیره سازی در محلی دیگر است.
Deserialize : عمل برعکس سریالیزشین است؛ یعنی دوباره ساختن آبجکت از روی جریانی از بایتها .
انواع فرمت ها در سریالیزشین :
1- Binary : بصورت باینری سریالایز میکند. (فشرده ترین و efficient ترین حالت است)
SOAP -2 : بصورت soap سریالایز میکند. (برای ارسال در شبکه و جایی که از تحت دات نت بودن کلاینتها مطمئن نیستیم)
XML -3 : بصورت xml سریالایز میکند. (برای ارسال تحت شبکه - مزیت : خوانایی)
برخی از موارد کاربرد سریالزیشین:
1- کپی یک انشعاب از آبجکتها
2- انتقال اطلاعات در شبکه
3- نگهداری state ها و snapshot های مختلف در یک برنامه (برای موارد حساس : مثل تراکنشهای بانکی و ...)
4- پیاده سازی Deep Copy و Shallow Copy
برای استفاده از Serialize می بایست Namespace
using System.Runtime.Serialization.Formatters.Binary;
، و برای کار با فایل از Namespace ،System.IO در پروژه استفاده می نماییم.
در پروژه مان می خواهیم طول و عرض فرممان را در هنگام بستن فرم Serialize نماییم و در هنگام باز شدن مجدد فرم آنها را Deserialize و استفاده نماییم.
در رویداد FormClosing کد زیر را می نویسیم
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
ArrayList arr = new ArrayList();
arr.Add(this.Width);
arr.Add(this.Height);
FileStream fs = new FileStream("C:\\Test.dat", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, arr);
}
در این قطعه کد با قرار دادن عرض و ارتفاع فرم در یک ArrayList و ایجاد یک فایل به نام Test.dat توسط شی BinaryFormatter شی arraylist را در فایل Serialize می نماییم.
حال برای Deserialize اطلاعات قطعه کد زیر را در رویداد Load فرم می نویسم، دقت شود که قرار دادن کد در try catch به منظور جلوگیری از رویداد خطا در هنگام load اول فرم و عدم وجود فایل test.dat می باشد.
private void Form1_Load(object sender, EventArgs e)
{
try
{
using (FileStream fs = new FileStream("C:\\Test.dat", FileMode.Open))
{
BinaryFormatter bf = new BinaryFormatter();
ArrayList ar = (ArrayList)bf.Deserialize(fs);
this.Width = (int)ar[0];
this.Height = (int)ar[1];
}
}
catch { }
}
حال با اجرا فرم و تغییر سایز آن در صورتی که فرم را دوباره باز نماییم سایز آن به میزان سایز فرم قبل از بسته شدن خواهد بود.
التماس دعا...
اگه مفید بود خواستید تشکر بزنید...