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

نام تاپیک: ناهمخوانی شی منتج شده از Desrialize کردن فایل Xml با آبجکت اولیه که فایل Xml از روی آن Serialize شده

  1. #1

    ناهمخوانی شی منتج شده از Desrialize کردن فایل Xml با آبجکت اولیه که فایل Xml از روی آن Serialize شده

    سلام
    فرض کنید کلاسی داریم به نام CourseList :

    namespace Project
    {
    [Serializable]
    public class CourseList
    {
    [XmlElement("Courses",IsNullable =true))]
    public List<string> Courses { get; set; }
    }
    }
    درون متد Main یک نمونه از این کلاس میسازیم و نمونه را درون یک فایل Xml سریال می کنیم . (خاصیت Courses را new نمیکنم) :


    namespace Project
    {
    class Program
    {
    static void Main(string[] args)
    {

    CourseList SerializedCourses = new CourseList();
    XmlSerializer serializer = new XmlSerializer(typeof(CourseList));
    TextWriter writer = new StreamWriter("ex.xml");
    serializer.Serialize(writer, SerializedCourses );
    writer.Close();

    Console.ReadKey();

    }
    }
    }
    فایل Xml خروجی به شکل زیر است :
    کد HTML:
    <?xml version="1.0" encoding="utf-8"?>
    <CourseList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    حالا همین فایل xml رو Deserialize می کنیم و در آبجکت DeserializedCourses قرار می دهیم :

    CourseList DeserializedCourses;
    FileStream fs = new FileStream("ex.xml", FileMode.Open);
    DeserializedCourses = (CourseList)serializer.Deserialize(fs);
    در شی SerializedCourses , فیلد Courses به درستی null است .چون اصلا مقدار دهی و نمونه سازی نشده
    ولی مشکل اینجاست که در شی DeserializedCourses , فیلد Courses مقدارش null نیست و یرای خاصیت Courses نمونه ساخته شده و من متوجه نمیشم که چطور.

    این هم عکس از پنجره Watch محیط Debugging :

    serialize.jpg
    ممنون میشم نظرتون رو بگید.
    آخرین ویرایش به وسیله pooya1072 : دوشنبه 30 خرداد 1401 در 02:00 صبح

  2. #2

    نقل قول: ناهمخوانی شی منتج شده از Desrialize کردن فایل Xml با آبجکت اولیه که فایل Xml از روی آن Seri

    IsNullable را برای پراپرتی هایی که میتونن null باشند، ست کنید.
    https://docs.microsoft.com/en-us/dot...ute.isnullable

  3. #3

    نقل قول: ناهمخوانی شی منتج شده از Desrialize کردن فایل Xml با آبجکت اولیه که فایل Xml از روی آن Seri

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    IsNullable را برای پراپرتی هایی که میتونن null باشند، ست کنید.
    https://docs.microsoft.com/en-us/dot...ute.isnullable
    سلام و تشکر
    من IsNullable رو برای هر دو حالت هم true هم false ست کردم. هیچ تفاوتی نداره.
    در هر حال نمونه سازی میشه

  4. #4

    نقل قول: ناهمخوانی شی منتج شده از Desrialize کردن فایل Xml با آبجکت اولیه که فایل Xml از روی آن Seri

    خروجی xml در این دو حالت تفاوتی هم داره یا نه؟

  5. #5

    نقل قول: ناهمخوانی شی منتج شده از Desrialize کردن فایل Xml با آبجکت اولیه که فایل Xml از روی آن Seri

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    خروجی xml در این دو حالت تفاوتی هم داره یا نه؟
    خروجی xml هر دو‌ یکسان است :
    کد HTML:
    <?xml version="1.0" encoding="utf-8"?>
    <CourseList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    آخرین ویرایش به وسیله pooya1072 : سه شنبه 31 خرداد 1401 در 06:57 صبح

  6. #6
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    45
    پست
    6,362

    نقل قول: ناهمخوانی شی منتج شده از Desrialize کردن فایل Xml با آبجکت اولیه که فایل Xml از روی آن Seri

    اجبار خاصی وجود داره که از فرمت Xml برای پروسه Serialization/DeSerialization استفاده می کنید؟

    استفاده از فرمت JSON خیلی راحت تره، ابزارهای Serialization اش هم خیلی بروزتر و مدرن تر هستند، حجم خروجی سریالایز شده اش هم کمتره، و در صورت نیاز به استفاده از آبجکت سریالایز شده در تکنولوژی هایی غیر مبدا، خیلی راحت تر خواهید بود.

  7. #7

    نقل قول: ناهمخوانی شی منتج شده از Desrialize کردن فایل Xml با آبجکت اولیه که فایل Xml از روی آن Seri

    نقل قول نوشته شده توسط مهدی کرامتی مشاهده تاپیک
    اجبار خاصی وجود داره که از فرمت Xml برای پروسه Serialization/DeSerialization استفاده می کنید؟

    استفاده از فرمت JSON خیلی راحت تره، ابزارهای Serialization اش هم خیلی بروزتر و مدرن تر هستند، حجم خروجی سریالایز شده اش هم کمتره، و در صورت نیاز به استفاده از آبجکت سریالایز شده در تکنولوژی هایی غیر مبدا، خیلی راحت تر خواهید بود.
    اجبار خاصی نیست واقعا
    فقط این قضیه ذهنم رو مشغول کرده بود
    فقط یه وسواس فکری شده برام .... در هر حال ممنون
    توی سایت StackOverFlow م سوال رو مطرح کردم ولی اونجا هم جوابی نگرفتم
    C#‎‎‎‎ - The Deserialized Object is different from the Serialized Object with the same class - Stack Overflow

  8. #8

    نقل قول: ناهمخوانی شی منتج شده از Desrialize کردن فایل Xml با آبجکت اولیه که فایل Xml از روی آن Seri

    با معرفی نوع داده , isnullable هم کار کرد

    [XmlElement(
    Type = typeof(List<string>) ,
    IsNullable = true)
    ]

  9. #9

    نقل قول: ناهمخوانی شی منتج شده از Desrialize کردن فایل Xml با آبجکت اولیه که فایل Xml از روی آن Seri

    نقل قول نوشته شده توسط Mahmoud.Afrad مشاهده تاپیک
    با معرفی نوع داده , isnullable هم کار کرد

    [XmlElement(
    Type = typeof(List<string>) ,
    IsNullable = true)
    ]
    سلام و تشکر بابت پیگیری شما
    کلاس را طبق راهنمایی شما تغییر دادم ولی همچنان فیلد Courses شی DeserializedCourses که از فایل ex.xml استخراج شده مقدارش null نمیشه . در صورتی که فیلد Courses شی SerializedCourses که فایل ex.xml از سریال کردن اون ایجاد شده مقدارش null

    namespace TreeProject
    {
    [XmlRoot(ElementName = "CourseList")]
    public class CourseList
    {
    [XmlElement(Type =typeof(List<string>),IsNullable =true)]
    public List<string> Courses { get; set; }
    }
    }



  10. #10
    کاربر دائمی آواتار ShayanFiroozi
    تاریخ عضویت
    شهریور 1397
    محل زندگی
    بندرعباس ، خلیج همیشه فارس
    سن
    36
    پست
    181

    Lightbulb نقل قول: ناهمخوانی شی منتج شده از Desrialize کردن فایل Xml با آبجکت اولیه که فایل Xml از روی آن Seri

    سلام ،

    از کتابخانه Protobuf استفاده کنین. چندین برابر از Serialization مایکروسافت و JSON سریعتر و قوی تره.

    از طریق دستور زیر در Package Manager میتونین Protobuf رو به پروژتون اضافه کنین.

    Install-Package protobuf-net



    [ProtoContract]
    public class CourseList
    {
    [ProtoMember(1)]
    public List<string> Courses { get; set; }
    }


    public byte[] Serialize(CourseList input)
    {
    using (MemoryStream memoryStream = new MemoryStream())
    {
    Serializer.Serialize(memoryStream, input);
    return memoryStream.ToArray();
    }
    }


    public CourseList DeSerialize(byte[] data)
    {
    return Serializer.Deserialize<CourseList>(new MemoryStream(data));
    }



    چند نکته :


    • تقریبا تمامی ابزار های Serialization با Dictionary ها مشکل دارن ، پس از Dictionary ها استفاده نکنین.
    • خروجی Protobuf از نوع byte[] هستش یعنی داده واقعی که میتونین توی فایل ذخیره کنین و حتی همونو روی شبکه Transfer کنین ولی خروجی JSON ها Text هستش که این خیلی میتونه دردسر ساز بشه.
    • عملکرد Protobuf خیلی سریعتر از Serialization های مایکروسافته ، ضمنا Binary Serialization منسوخ شده (کلیک کنین)




    آخرین ویرایش به وسیله ShayanFiroozi : جمعه 03 تیر 1401 در 10:04 صبح دلیل: آپلود کد نمونه




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

  1. خروج داده از اطلاعات serialize
    نوشته شده توسط boomba در بخش PHP
    پاسخ: 4
    آخرین پست: دوشنبه 13 مهر 1394, 11:29 صبح
  2. serialize
    نوشته شده توسط idehrayan در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 0
    آخرین پست: شنبه 18 بهمن 1393, 21:11 عصر
  3. پاسخ: 0
    آخرین پست: دوشنبه 04 اردیبهشت 1391, 17:25 عصر
  4. مشکل در Serialize کردن
    نوشته شده توسط azarin62 در بخش C#‎‎
    پاسخ: 4
    آخرین پست: یک شنبه 23 دی 1386, 23:11 عصر
  5. Serialize
    نوشته شده توسط Hamedm در بخش VB.NET
    پاسخ: 0
    آخرین پست: سه شنبه 21 تیر 1384, 15:41 عصر

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

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