من با کد مشکلی ندارم
مشکل من این بود که کلاسی که سریالیز نمی شد را سریالیز کنم که حل شد
تنها کلاسهایی سریالیز می شن که صفت [Serializable] داشته باشند
و از اینترفیس System.Runtime.Serialization.ISerializable ارث ببرند
بنابراین اگر بخواهیم کلاسی را که این خصوصیات را ندارد سریالیز کنیم باید
یک کلاس تعریف کنیم که از کلاس مورد نظر و System.Runtime.Serialization.ISerializable ارث ببرد
و متد GetObjectData از اینترفیس System.Runtime.Serialization.ISerializable را پیاده سازی کنیم.
مانند کد زیر
publicclass MyTableLayoutPanel : TableLayoutPanel, System.Runtime.Serialization.ISerializable
{
//در این قسمت یک سازنده ایجاد می کنیم که پارامترهای زیر را دارد
//هنگام دی سریالیز کردن این سازنده صدا زده میشود
protected MyTableLayoutPanel(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
{
if (info == null)
thrownew System.ArgumentNullException("info is null");
//خصوصیت های را که می خواهیم از حالت سریالیز شده بخوانیم و به آبجکت تبدیل کنیم
this.BackColor = (Color)info.GetValue("BackColor", typeof(Color));
}
// در این متد خصوصیاتی را که می خواهیم سریالیز کنیم را مشخص می کنیم
//هنگام سریالیز کردن این متد صدا زده می شود
publicvoid GetObjectData(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
{
info.SetType(typeof(MyTableLayoutPanel));
//خصوصیاتی که باید سریالیز شوند
info.AddValue("BackColor", this.BackColor);
}
}