Ahmadreza Mozaffary
Ahmadreza Mozaffary
خواندن ۴ دقیقه·۸ ماه پیش

اتریبیوت Serializable در NET.

درود و عرض ادب

توی این مقاله قرار هست که با هم این اتریبیوت یعنی Serializable روی توی دات نت بررسی کنیم و کلا ببینیم که این اتریبیوت به چه کاری میاد ، چجوری میشه استفادش کرد چه تارگت هایی داره و استفاده یا عدم استفاده از اون چه تاثیری روی تارگت های این اتریبیوت داره؟


بررسی اتریبیوت Serializable  در دات نت
بررسی اتریبیوت Serializable در دات نت


خب ، من تصمیم گرفتم که از آخر به اول با هم بررسی کنیم ، یعنی اول ببینیم چجوری استفاده میشه ، تارگتاش چیا هستن و بعد چرایی استفاده یا عدم استفاده از اون رو با هم ببینیم .




ما وقتی از تارگت صحبت میکنیم ، درواقع راجع به اون موجودیت ها یا اون چیزهایی هست که ما میتونیم روی اونا از این اتریبیوت ( یا هر اتریبیوتی به طور کلی ) استفاده کنیم.

توی این موضوع خاص و این اتریبیوت خاص ، ما تارگت هامون به صورت زیر هستند :

نمونه کد برای تارگت های اتریبیوت
نمونه کد برای تارگت های اتریبیوت

همون طور که توی Defenition مربوط به این اتریبیوت میبینیم ، اجازه داره که روی کلاس ها ، استراکت ها ، اینام ها و دِلیگِیت ها استفاده بشه !

یعنی ما اگر که فرضا یک کلاس داشتیم و خواستیم که روی اونها از این اتریبیوت استفاده کنیم ، کافیه که به صورت زیر این کار رو انجام بدیم :

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


به همین سادگی ! کافیه که بالای اون تارگت مد نظر ( در اینجا تارگتمون کلاس هست ) بیایم و یک bracket باز کنیم و Serializable رو توی اون بنویسیم .

البته میتونیم using مربوط به System رو هم اضافه کرده باشیم :)

برای سایر تارگت های مجاز این اتریبیوت هم ، روش استفاده مشابه هست .


برای اینکه بیشتر با این اتریبیوت آشنا بشیم ، در وهله اول باید بدونیم که مفهوم Serialization به خودی خود یعنی چی ؟

اگه بخوام ساده تر بگم ، وقتی که ما یک آبجکت رو توی دات نت میسازیم ، خیلی برای ما اهمیتی نداره که اون توی رم ( مموری ) چجوری ذخیره میشه چون فریمورک این کار رو برای ما انجام میده ولی اگر این ابجکت رو ما با یک Http Request ارسال یا دریافت کنیم ، یا اون رو از یک دامین به دامین دیگر انتقال بدیم یا به هر صورتی اون رو انتقال بدیم ، باید بدونیم که این دیتا ( ابجکت ) دقیقا چجوری مدیریت و represent میشه چرا که قرار هست به فرمت ( فرمت ها ) دیگه تبدیل بشه که به این تبدیل میگیم Serialization !

بیاید با یک مثال این مفهوم ( Serialization ) رو بررسی کنیم :

وقتی که فرضا ما از کلاینتِ جاواسکریپتی خودمون یک Http Request ارسال میکنیم و به عنوان مثلا Body درخواستمون یک آبجکت رو ارسال میکنیم ، در پشت صحنه ما داریم درواقع یک مجموعه ای از Bit ها رو به کمک ریکوئستمون میفرستیم !

حالا فرض کنیم این ریکوئست به اپلیکیشن دات نتمون ارسال میشه و ما توی بکند داریم به عنوان مثال از Newtonsoft برای سریالایزر استفاده میکنیم که اگه بخام خلاصه بگم ، (i.g) به کمک این سریالایزر ما میتونیم ریکوئست هایی که از سمت فرانت میان و طبق Convention های جاواسکریپت پراپرتی های body اونها camelCase هستند رو به کلاس های سیشارپی که فیلد ها و پراپرتی های اون ها PascalCase هستند تبدیل و کانورت کنیم ، برای اینکه بتونیم این کار رو بکنیم ، حتما باید کلاس مد نظرمون [Serializable] رو به عنوان اتریبیوت بالای خودش داشته باشه تا ما بتونیم این کار رو انجام بدیم .

مورد بالا یک نوع و مثال از سریالایز کردن بود! این سریالایز میتونه صرفا فقط تبدیل از camelCase به PascalCase نباشه و هر بیزینس دیگه یا هر لاجیک دیگه ای رو داشته باشه ، اما نکته مهم اینه که فارغ از نوع و متد سریالایز و دی سریالاز کردن ، باید کلاس یا تارگت مربوطه ( که بالا راجع به تارگت حرف زدیم ) حتما اتریبیوت [Serializable] رو داشته باشه !

حالا فرضا ما یک کلاس رو سریالایز میکنیم و اتریبیوت مربوطه رو برای اون به کار میبریم ولی مثلا میخوایم یکی از متد های کلاسمون سریالایزبل نباشه ! میتونیم روی کل کلاس این اتریبیوت رو قرار بدیم و اون متد رو با اتریبیوت زیر غیر قابل سریالایز کنیم .





من به طور کلی هر موضوعی رو که برای خودم سوال پیش میاد ، سعی میکنم راجع بهش تحقیق کنم و بعد از اون سعی میکنم توی این پلتفرم بنویسم و اون رو در معرض قضاوت قرار بدم تا اگر که توی تحقیقاتم دچار کج فهمی شدم ، از این طریق بتونم بهتر یاد بگیرم و عمیق تر اون موضوع رو درک کنم ، پس :

در وهله اول خیلی ممنونم از شما که وقت گذاشتین و این مقاله رو مطالعه کردین و بعد از اون ازتون میخوام اگر که نکته ، انتقاد ، پیشنهاد و یا ویرایشی رو برای این مقاله مد نظر دارین ، حتما از طریق کامنت های این بخش یا لینکدین ، با من در میون بذارین :))


ارادتمند شما ، احمدرضا مظفری 💬

csharpaspnetcore
من احمدرضا مظفری به عنوان Software developer توی شرکت همکاران سیستم مشغول هستم ، توی زمینه وب ، میخونم ، یادمیگیرم ، مینویسم .
شاید از این پست‌ها خوشتان بیاید