نمایش نتایج 1 تا 5 از 5

نام تاپیک: مشکل در Serialize کردن

  1. #1

    Tick مشکل در Serialize کردن

    سلام
    من یک کلاس دارم که باید Serialize بشه .
    بعضی Property های این کلاس از نوع کلاسهایی هستند که Attribute سریالیز [Serialize] براش تعریف نشده و بنابراین قابل Serialize شدن نیست

    کدی که برای سریالیز استفاده کردم به صورت زیره

    publicstaticvoid Save(ModuleInformation moduleInformation, string fileName)
    {
    try
    {
    IFormatter formatter = newBinaryFormatter();

    using (Stream fileStream = File.Open(fileName, FileMode.Create))
    {
    formatter.Serialize(fileStream, moduleInformation);
    }
    }
    catch (Exception error)
    {
    thrownewException("ModuleInformation.Save : " + error.Message);
    }
    }


    برای سریالیز کردن این کلاس ها چه باید کرد

  2. #2
    نقل قول نوشته شده توسط azarin62 مشاهده تاپیک
    سلام
    من یک کلاس دارم که باید Serialize بشه .
    بعضی Property های این کلاس از نوع کلاسهایی هستند که Attribute سریالیز [Serialize] براش تعریف نشده و بنابراین قابل Serialize شدن نیست
    چرا از shallow serialization استفاده نمیکنید؟
    با
    XmlSerializer (البته بجز اعضای خصوصی)
    Private variables and properties are all serialized. In binary serialization, both the private variables and properties are serialized. This is known as deep serialization, as opposed to shallow serialization in XML serialization (which only serializes the public variables and properties)
    ...مرا به خانه ام ببر، اگرچه خانه؛ خانه نیست

  3. #3
    من از این روش استفاده کردم چون تعداد کلاسهایی که تو پروژه استفاده کردم زیاد بود
    اگه بخوام از XmlSerializerاستفاده کنم باید برم تو تک تک کلاسهام تعریف کنم که کدوم Property سریالیز بشه و کدوم نشه
    [System.Xml.Serialization.XmlIgnoreAttribute]


    اما کلاسهایی که من الان مشکل دارن 7 تا هستن
    راه حل بهتری نداری

  4. #4

  5. #5
    من با کد مشکلی ندارم
    مشکل من این بود که کلاسی که سریالیز نمی شد را سریالیز کنم که حل شد

    تنها کلاسهایی سریالیز می شن که صفت [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);
    }
    }

تاپیک های مشابه

  1. Serialize
    نوشته شده توسط Hamedm در بخش VB.NET
    پاسخ: 0
    آخرین پست: سه شنبه 21 تیر 1384, 15:41 عصر
  2. Serialize & Deserialize
    نوشته شده توسط پروفسور در بخش ASP.NET Web Forms
    پاسخ: 2
    آخرین پست: چهارشنبه 07 اردیبهشت 1384, 18:11 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •