
آموزش سریالیزیشن Serialization در سی شارپ
آموزش سریالیزیشن Serialization در سی شارپ یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی سریالیزیشن در دات نت 4.5 است که با نام اصلی Serialization in .NET 4.5 از شرکت Pluralsight منتشر شده است.
سریالیزیشن چیست؟
سریالیزیشن (Serialization) فرآیند تبدیل یک تک شی و یا یک گراف شی (Object Graph) به یک Stream بایت است. هدف از سریالیزیشن ذخیره سازی شی و یا گراف شی در یک فضای ذخیره سازی شبیه فایل، دیتابیس و... و یا ارسال آن بر روی شبکه و یا به برنامه های دیگر است.
همانطور که در تصویر بالا مشاهده می کنید پس از انجام عملیات سریالیزیشن بر روی شی مورد نظر، نه تنها خود شی به همراه مقادیر فیلدها و پروپرتی ها، بلکه اطلاعات مربوط به Assembly و Culture و حتی ورژن شی را می توان از طریق stream در یک فایل، دیتابایس و یا حتی حافظه ی سیستم منتقل کرد.
کاربردهای سریالیزیشن چیست؟
سریالیزیشن به برنامه نویس امکان این را می دهد که به یک شی را ذخیره و در صورت نیاز آن را دوباره بازسازی کند. به عبارت دیگر، سریالیزیشن به معنی ذخیره سازی اشیا و حتی رد و بدل کردن آنهاست. علاوه بر این، با استفاده از سریالیزیشن می توان یک شی را از طریق یک وب سرویس به یک برنامه ی دیگر فرستاد. انتقال شی از یک دامین به دامین دیگر و یا حتی ارسال یک شی به عنوان یک رشته ی XML به انضمام حفظ امنیت و اطلاعات مربوط به اشیا می تواند با استفاده از سریالیزیشن انجام پذیرد.
ذحیره سازی اشیا (Persistence)
یکی از کاربردهای سریالیزیشن در برنامه های بزرگ ذخیره سازی اشیا می باشد. در برنامه های بزرگ و اساسی گاهی ممکن است نیاز به ذخیره سازی اشیا برنامه داشته باشید.

عملکرد برنامه ی BizTalk Orchestration در این باره بسیار جذاب است. یکی از دلایل ذخیره سازی اشیا برنامه می تواند ایجاد یک Restore Point باشد تا در صورت شکست نرم افزار، از آن استفاده شود.
انتقال اشیا (Transmission)
انتقال اشیا یکی دیگر از کاربردهای سریالیزیشن است. تکنولوژی های WCF و Web API هر دو از این تکنیک استفاده می کنند. در واقع انتقال اشیا بر روی شبکه و حتی در یک کامپیوتر یکسان و بین دو پردازش متفاوت (Interprocess Transmission) می تواند بسیار مفید باشد.
مدیریت نسخهها، وراثت و سازگاری در Serialization
در برنامههای پیشرفته .NET، تبدیل یک شیء به داده قابلذخیره یا قابلانتقال تنها بخشی از مسئله است؛ ساختار کلاسها ممکن است با گذشت زمان تغییر کند و همین موضوع روی بازیابی اطلاعات تأثیر بگذارد. این آموزش با بررسی مسائل مربوط به Versioning در Typeها، مفهوم Round Tripping و رفتار Serialization در حضور وراثت، به چالشهای واقعی نگهداری داده میپردازد. همچنین نحوه پیادهسازی `ISerializable` در کلاس پایه بررسی میشود تا با ملاحظات کنترل فرایند Serialization در سلسلهمراتب کلاسها آشنا شوید و بدانید تغییر ساختار مدلها چه پیامدهایی برای دادههای قبلی دارد.
موضوع `Surrogate`ها نیز در سرفصلهای آموزش قرار دارد و در کنار مباحث وراثت و نسخهبندی، دید دقیقتری از کنترل فرایند Serialization ارائه میکند. برای نمونه، هنگام کار با Typeهایی که نمیتوان آنها را مستقیماً مطابق نیاز برنامه سریالسازی کرد، انتخاب راهکار مناسب اهمیت پیدا میکند. آشنایی با این مفاهیم برای توسعهدهندگانی مفید است که با دادههای ذخیرهشده در قالبهای قدیمی، تبادل اطلاعات میان نسخههای مختلف یک برنامه یا مدلهای شیء پیچیده سروکار دارند. این دانش کمک میکند هنگام تغییر کلاسها، سازگاری دادهها را آگاهانهتر بررسی کنید.
مقایسه Binary، XML و JSON Serialization در .NET
این آموزش سه رویکرد مهم Serialization را در چارچوب .NET 4.5 بررسی میکند: `Binary Serialization`، `XML Serialization` و `JSON Serialization`. هر قالب شیوه متفاوتی برای نمایش دادهها دارد و انتخاب میان آنها به نیازهای برنامه، قالب مورد انتظار و نحوه مصرف اطلاعات بستگی دارد. در بخش XML، استفاده از `DataContractSerializer` و سناریوهای مرتبط با آن مطرح میشود؛ از جمله تعریف قرارداد داده و تعیین رفتار Typeها هنگام تبدیل به XML. آشنایی با این گزینهها به توسعهدهندگان کمک میکند هنگام طراحی لایه تبادل اطلاعات، بهجای انتخاب تصادفی قالب، محدودیتها و نیازهای فنی را در نظر بگیرند.

در بخشهای پیشرفتهتر، آموزش به `Known Type`ها، تغییر مقادیر پیشفرض `Data Contract` و استفاده از `Surrogate`ها میپردازد. این مباحث زمانی اهمیت دارند که مدل داده شامل نوعهای مشتقشده باشد یا لازم باشد رفتار سریالسازی با قرارداد پیشفرض تفاوت داشته باشد. همچنین شناخت `Stream` و نحوه کار با آن، زمینه لازم برای درک ارتباط میان اشیای برنامه و دادههای سریالشده را فراهم میکند. از آنجا که آموزش در سطح پیشرفته ارائه شده، برای برنامهنویسان C# مناسب است که میخواهند جزئیات بیشتری از رفتار Serializerها بدانند و در پروژههای دارای نیازهای مشخص تبادل داده، انتخاب فنی دقیقتری داشته باشند.
سرفصل مطالب آموزش ویدئویی سریالیزیشن در سی شارپ
فصل اول: مفاهیم پایه ی Serialization
- Stream (استیریم) چیست؟
- Object Graph (گرافی شی) چیست؟
- سریالیزیشن و دیسریالیزیشن چیست؟
- کاربردهای سریالیزیشن (ذخیره سازی اشیا) Persistence
- کاربردهای سریالیزیشن (انتقال اشیا) Transmission
فصل دوم: بررسی Binary Serialization
- سریالیزیشن باینری چیست؟
- Type Fidelity در سریالیزیشن باینری
- معرفی موتور سریالیزیشن باینری
- پیاده سازی یک Type به صورت Serializable
- سریالیزیشن باینری و وراثت
- حذف کردن فیلد ها از سریالیزیشن
- کنترل پروپرتی ها در سریالیزیشن
- دیسریالیزیشن و تابع سازنده
- جامعیت رفرنس ها (Reference Integrity)
- استریم های سریالیزیشن
- به اشتراک گذاری داده های سریالیز شده بین برنامه های مختلف
- مسائل مربوط به ورژن بندی Type ها
- سریالیزیشن و نوع های داده های Null
فصل سوم: بررسی Binary Serialization ریز
- Attribute های سریالیزیشن
- اینترفیس ISerializable و پیاده سازی آن
- وراثت در سریالیزیشن
- پیاده سازی اینترفیس ISerializable توسط کلاس پدر
- عدم پیاده سازی اینترفیس ISerializable توسط کلاس پدر
- مسائل مربوط به ورژن بندی در سریالیزیشن
- کار با SerializationBinder
- معرفی و کار با Surrogate ها در پیاده سازی سریالیزیشن
- Override کردن مکانیزم سریالیزیشن
- معرفی StreamingContext
- مسائل امنیتی در سریالیزیشن
فصل چهارم: پیاده سازی XML Serialization با استفاده از DataContractSerializer
- معرفی DataContractSerializer
- ساخت Stream های چند ریشه ای
- سریالیز کردن پروپرتی های Auto
- پشتیبانی از وراثت
- پیاده سازی وراثت و Known Type ها
- پیکربندی پویای Known Type ها
- مباحث Reference Integrity
- مباحث Serialization Hook ها
- کار با Surrogate ها
فصل پنجم: سناریوهای دیگر کار با DataContractSerializer
- سریالیز کردن Type های [Serializable]
- DataContractSerializer و فرمت Binary XML و MTOM
- DataContractSerializer در WCF (مباحث Encoding)
- تغییر مقادیر پیش فرض Data Contract
- نگاشت XSD
- سریالیز کردن کالکشن ها
- ورژن گذاری بر روی Data Contract
- مبحث Round Tripping
- مبحث NetDataContractSerializer
فصل ششم: بررسی XML Serialization ریز
- بدست آوردن کنترل کامل بر روی ساختار XML خروجی
- استفاده از XmlSerializer
- مزیت ها و معایب XmlSerializer
- معرفی و پیاده سازی اینترفیس IXmlSerializable
- کار با نگاشت های XSD و WCF
- پیاده سازی اینترفیس IXmlSerializable در WCF
فصل هفتم: بررسی JSON Serialization
- کاربردهای JSON
- معرفی DataContractJsonSerializer
- معرفی JavascriptSerializer
- مقایسه ی Json.Net و DataContractJsonSerializer و JavascriptSerializer
- پیاده سازی عملی JSON Serializer ها
- مقایسه ی عملکرد JSON Serializer ها







