تبلیغات
banner
banner
banner
تبلیغات
banner

فیلم های آموزشی : 36 +

تعداد کاربران : 41 +

تعداد کل مطالب : 338 +

تعداد نظرات : 32 +

حضرت علی (ع) : علم گنج بزرگی است که با خرج کردن تمام نمی شود.

آموزش مقدماتی تا پیشرفته سی شارپ بخش دویست و پنجاه و سوم


بنام اول برنامه نویس هستی.

سلام به همه لندلرنی های عزیز.
درخدمتتون هستیم با

آموزش مقدماتی تا پیشرفته سی شارپ بخش دویست و پنجاه و سوم


دریافت داده ها از یک فایل XML:

در بخش امتحان کنید بعد، قابلیتی را به برنامه اضافه خواهیم کرد تا بتواند داده ها را از یک فایل XML خوانـده و آنهـا را در برنامـه
قرار دهد،

به عبارت دیگر داده های موجود در دیسک را دی سریالایز خواهیم کرد.

امتحان کنید: دریافت داده ها از فایل XML

  • ویرایشگر کد مربوط به کلاس SerializableData را باز کرده و دو متد مـشخص شـده در زیـر را بـه آن اضافه کنید:
به قسمت طراحی فرم مربوط به Form1 برگشته و با استفاده از جعبه ابزار، یک کنترل Button دیگـر را بـه فـرم اضافه کنید.

خاصیت Name این کنترل را برابر با btnLoad و خاصـیت Text آن را برابـر بـا Load قـرار دهید.

روی این دکمه دو بار کلیک کرده تا متد مربوط به رویداد Click آن ایجاد شود.

سپس کد مشخص شده در زیر را در این متد وارد کنید:

همچنین لازم است که متد مشخص شده در زیر را نیز به کلاس Form1 اضافه کنید:

برنامه را اجرا کرده و روی دکمه ی Load کلیک کنید یا دکمه های L+Alt را فشار دهید.

اطلاعاتی که در قسمت قبل وارد کرده بودید، در فرم برنامه نمایش داده خواهند شد.

چگونه کار می کند؟

دی سریالایز کردن , عمل عکس سریالایز کردن است.

به وسیله ی این کار می توانید داده هایی را که در یک فایل با قالـب XML ذخیـره شـده انـد را اسـتخراج کـرده و در برنامـه قـرار دهیـد.

بـرای دی سـریالایز کـردن یـک شـیئ نیـز مـی توانیـد از کـلاس XmlSerializer استفاده کنید.

برای این کار نیز مانند قبل دو نسخه ی گوناگون از متد Load ایجاد می کنیم.

نسخه ی اول دو پارامتر دریافت می کنـد :

  • پـارامتر اول از نــوع String اســت و آدرس فــایلی را مــشخص مــی کنــد کــه داده هــا در آن قــرار دارد،
  • پــارامتر دوم نیــز از نــوع System.Type است و نوع کلاسی را دربر دارد که باید داده ها به شیئ ای از آن نوع تبدیل شوند.

برای فراخوانی این تـابع پارامتر دوم به این دلیل مورد نیاز است که کلاس XmlSerializer با توجـه بـه آن بتوانـد تـشخیص دهـد مقـادیر چـه خاصیت هایی باید در فایل وجود داشته باشند تا بتواند آنها را از فایل استخراج کند؟

دقت کنید که کلاس XmlSerializer هیچ اطلاعاتی در مورد فضای نام و یا فایل اسمبلی که شیئ بـه آن تعلـق دارد را در فایل XML ذخیره نمی کند،

بنابراین هنگام دی سریالایز کردن فقط بر اساس گفته ی برنامه نویس در مورد نوع شیئ داده های درون فایــل را بررســی مــی کنــد و ســعی مــی کنــد شــیئ ای از نــوع کــلاس مــشخص شــده را ایجــاد کنــد (کــلاس XmlSerializer فقط نام کلاسی که سریالایز کرده است را به عنوان نام عنصر ریشه قرار می دهد، ولی با استفاده از آن هم نمی تواند نوع واقعی کـلاس را تـشخیص دهـد.

زیـرا بـرای نمونـه در مثـال بـالا ممکـن اسـت شـما چنـدین کـلاس بـه نـام Address در فضای نامهای گوناگون داشته باشید).

مسلماً در نسخه ی اول متد Save اولین کاری که باید انجام دهیم این است که ببینیم آیا فایل مشخص شده وجود دارد یا نه؟

اگر فایل وجود نداشت یک شیئ خالی از نوع Address ایجاد کرده و آن را به عنوان نتیجه برمی گردانیم :

اما اگر فایل وجود داشت، مانند متد Save آن را باز می کنید و سپس به نسخه ی دوم متد Load می فرسـتید.

سـپس فایـل را می بندید و شیئ ای که از نسخه ی دوم متد Load برگشته است را به عنوان نتیجه برمی گردانید :

نسخه ی دوم متد Load نیز دوم پارامتر دریافت می کند:

  • پارامتر اول یک شیئ از نوع Stream است کـه حـاوی اتـصالی بـه فایل XML مورد نظر است.
  • پارامتر دوم نیز یک شیئ از کلاس Type.System است و نوع شیئ را مشخص مـی کنـد کـه باید به وسیله ی کلاس XmlSerializer ایجاد شود.

همانطور که مشاهده می کنید این متد بسیار مـشابه متـد Save است که در قسمت قبل توضیح دادیم و نکته ی خاصی ندارد.

فقط در این متد با اسـتفاده از متـد Deserialize از کـلاس XmlSerializer شیئ مورد نظر را بر اساس داده های موجود در فایل XML ایجاد می کنیم :

هنگامی که متد Deserialize را فراخوانی می کنیم، باید نوع شیئ ای که می خواهیم ایجاد کنـیم را بـرای آن مـشخص کنیم.

به این ترتیب این متد میتواند بین تمام خاصیت های آن شیئ حرکت کرده و به دنبال آنهایی بگردد کـه از نـوع خوانـدنی – نوشتنی باشند.

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

در فرم اصلی برنامه هنگامی که متد btnLoad_Click فراخوانی شد، متد Load را فراخوانی می کنیم.

بـرای مـشخص کردن مقدار پارامتر دوم این متد، از عملگر typeof استفاده می کنیم تا نوع شیئ مورد نیاز را بدست آوریم.

این عملگر یک شیئ از کلاسSystem.Type را برمی گرداند که مشخص کننده ی نوع کلاسی است که به آن فرستاده شده است.

متد Load نیـز یک شیئ از کلاس Object به عنوان نتیجه برمی گرداند، پس آن را ابتدا به شیئ ای از کلاس Address تبدیل کـرده و نتیجه را در newAddress قرار می دهیم.

سپس با فراخوانی متد PopulateFormFromAddres ،داده های شیئ جدید را در فرم قرار می دهیم.

در قسمت دویست و پنجاه و چهارم با مبحث فرستادن ایمیل با سی شارپ آشنا میشوید.

 

کانال آپارات وبسایت


درباره نویسنده
سجاد اسدی
   سجاد اسدی

سجاد اسدی هستم دانشجوی رشته نرم افزار و علاقه مند به تدریس و یادگیری دروس مرتبط با تکنولوژی نرم افزار و اینترنت اشیاء جهت ارتباط با بنده مراجعه شود به آیدی سروش و تلگرام : @ordervira و پیج بنده در اینستاگرام instagram.com/sajjadred11 ""اللهم صل علی محمد و آل محمد"" برای شروع هیچ وقت دیر نیست. "الهم عجل لولیک الفرج"

دیدگاه بگذارید

avatar
  اشتراک  
اطلاع رسانی

aparat کانال آپارات

soroush کانال سروش

کانال آی گپ