التسلسل وإلغاء التسلسل في C# مع مثال

⚡ ملخص ذكي

تُحوّل عملية التسلسل في لغة C# الكائن إلى سلسلة من البايتات، مما يسمح بحفظه في ملف أو إرساله بين التطبيقات؛ بينما تُعيد عملية إلغاء التسلسل بناء الكائن. ستتعلم هنا كيفية تسلسل الكائنات وإلغاء تسلسلها مع أمثلة توضيحية.

  • 🔄 ما هو : تقوم عملية التسلسل بكتابة كائن C# إلى ملف، وتقوم عملية إلغاء التسلسل بقراءته مرة أخرى.
  • 🏷️ [قابل للتسلسل]: يحتاج الصنف إلى السمة [Serializable] قبل أن يتم تسلسله.
  • 💾 التنسيق الثنائي: يقوم BinaryFormatter مع FileStream بكتابة الكائن في شكل ثنائي.
  • 🧩 الأشكال: يدعم C# أيضًا تسلسل XML و JSON للحصول على مخرجات قابلة للقراءة.
  • 🤖 مساعدة الذكاء الاصطناعي: تقوم أدوات الذكاء الاصطناعي مثل GitHub Copilot بإنشاء رمز التسلسل على الفور.

التسلسل وإلغاء التسلسل في لغة C#

التسلسل وإلغاء التسلسل في C#

يُستخدم مفهوم التسلسل وفك التسلسل عند الحاجة إلى إرسال بيانات متعلقة بالكائنات من تطبيق إلى آخر. يُستخدم التسلسل لتصدير بيانات التطبيق إلى ملف، ثم يستخدم التطبيق المُستقبِل فك التسلسل لاستخراج البيانات.tract البيانات من التطبيق لاستخدامها لاحقًا.

التسلسل هو مفهوم تتم فيه كتابة كائنات فئة C# أو تسلسلها إلى ملفات. لنفترض أن لديك فصل C# يسمى البرنامج التعليمي. ويحتوي الفصل على خاصيتين للمعرف واسم البرامج التعليمية.

يمكن استخدام التسلسل لكتابة خصائص بيانات فئة البرنامج التعليمي مباشرة إلى ملف. يتم استخدام إلغاء التسلسل لقراءة البيانات من الملف وإنشاء كائن البرنامج التعليمي مرة أخرى.

أنواع التسلسل في لغة C#

تدعم لغة C# عدة صيغ للتسلسل، وتختار الصيغة المناسبة بناءً على مكان استخدام البيانات. الأنواع الرئيسية مذكورة أدناه.

  • التسلسل الثنائي يحوّل هذا البرنامج كائنًا إلى دفق ثنائي مضغوط. وهو سريع، لكنه غير قابل للقراءة البشرية، ويرتبط ببيئة .NET.
  • تسلسل XML يستخدم فئة XmlSerializer لكتابة الخصائص العامة للكائن إلى ملف XML قابل للقراءة.
  • تسلسل JSON يستخدم System.Text.Json أو Newtonsoft.Json لإنتاج JSON خفيف الوزن، وهو التنسيق الأكثر شيوعًا لواجهات برمجة تطبيقات الويب.
  • تسلسل SOAP يقوم بتنسيق البيانات كرسائل SOAP لخدمات الويب القديمة.

كيفية إجراء تسلسل لكائن في C#

دعونا نلقي نظرة على مثال لكيفية تحقيق ذلك.

في مثالنا، سنقوم بتنفيذ الخطوات عالية المستوى أدناه في التعليمات البرمجية

  1. قم بإنشاء فئة تسمى البرنامج التعليمي والتي تحتوي على خاصيتين، وهما المعرف والاسم
  2. سنقوم بعد ذلك بإنشاء كائن من الفصل وتعيين قيمة "1" لخاصية المعرف وقيمة ".Net" لخاصية الاسم.
  3. سنستخدم بعد ذلك التسلسل لإجراء تسلسل للكائن أعلاه إلى ملف يسمى example.txt
  4. وأخيرًا، سوف نستخدم إلغاء التسلسل لإلغاء تسلسل الكائن من الملف وعرض القيم في وحدة التحكم.

أدخل الكود أدناه في ملف Program.cs الخاص بتطبيق وحدة التحكم.

الخطوة 1) أضف الفصل.

الخطوة الأولى هي إضافة الفئة التي سيتم استخدامها للتسلسل

تسلسل كائن في C#

Code تفسير:-

  1. يجب أن تحتوي الفئة التي تحتاج إلى إجراء تسلسل على السمة [Serializable]. هذه هي الكلمة الأساسية في C#. يتم بعد ذلك إرفاق هذه الكلمة الأساسية بفصل البرنامج التعليمي. إذا لم تذكر هذه السمة، فسوف تحصل على خطأ عند محاولة إجراء تسلسل للفئة.
  2. التالي هو تعريف الفئة التي سيتم تسلسلها. نحن هنا نحدد فئة تسمى "البرنامج التعليمي" ونوفر خاصيتين، إحداهما "المعرف" والأخرى "الاسم".

الخطوة 2) قم بإنشاء الكائن.

في هذه الخطوة، سنقوم أولاً بإنشاء كائن فئة البرنامج التعليمي وإجراء تسلسل له في الملف المسمى example.txt

تسلسل كائن في C#

Code تفسير:-

  1. أولاً، نقوم بإنشاء كائن من فئة البرنامج التعليمي. نقوم بعد ذلك بتعيين قيمة "1" للمعرف و".net" لخاصية الاسم.
  2. نستخدم بعد ذلك فئة المنسق المستخدمة لإجراء تسلسل للكائن أو تحويله إلى تنسيق ثنائي. تتم البيانات الموجودة في الملف في التسلسل بتنسيق ثنائي. بعد ذلك، نقوم بإنشاء كائن دفق الملف. يتم استخدام كائن دفق الملف لفتح الملف example.txt لأغراض الكتابة. يتم استخدام الكلمات الأساسية FileMode.Create وFileMode.Write للإشارة على وجه التحديد إلى ضرورة فتح الملف لأغراض الكتابة.
  3. وأخيرًا، نستخدم طريقة التسلسل لنقل البيانات الثنائية إلى الملف. ثم نقوم بإغلاق الدفق، منذ الكتابة عملية اكتمال.

الخطوة 3) استخدم إلغاء التسلسل.

وأخيرًا للتأكد من وجود البيانات في الملف، نستخدم إلغاء التسلسل لإلغاء تسلسل الكائن من الملف.

تسلسل كائن في C#

using System;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
  [Serializable]
  class Tutorial
  {
  public int ID;
  public String Name;
   static void Main(string[] args)
   {
    Tutorial obj = new Tutorial();
    obj.ID = 1;
    obj.Name = ".Net";

    IFormatter formatter = new BinaryFormatter();
    Stream stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Create,FileAccess.Write);

    formatter.Serialize(stream, obj);
    stream.Close();

    stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Open,FileAccess.Read);
    Tutorial objnew = (Tutorial)formatter.Deserialize(stream);

    Console.WriteLine(objnew.ID);
    Console.WriteLine(objnew.Name);

    Console.ReadKey();
  }
 }
}

Code تفسير:-

  1. نقوم بإنشاء الكائن "مجرى" لفتح الملف example.txt في وضع القراءة فقط.
  2. نستخدم بعد ذلك فئة المنسق المستخدمة لإلغاء تسلسل الكائن، والذي تم تخزينه في ملف example.txt. يتم تعيين الكائن الذي تم إرجاعه إلى الكائن objnew.
  3. أخيرًا، نقوم بعرض خصائص الكائن "objnew" على وحدة التحكم باستخدام خاصيتي "المعرف" و"الاسم".

عندما يتم تعيين الكود أعلاه، ويتم تشغيل المشروع باستخدام البصرية ستوديو، سوف تحصل على الناتج أدناه.

انتاج:-

تسلسل كائن في C#

يمكنك أن ترى من الناتج أعلاه أن القيم من الملف تم تسلسلها بشكل صحيح وعرضها في وحدة التحكم.

تسلسل JSON في لغة C#

يُعدّ JSON التنسيق الأكثر استخدامًا على نطاق واسع للتطبيقات الحديثة وواجهات برمجة تطبيقات الويب. System.Text.Json تقوم مساحة الاسم بتسلسل وفك تسلسل الكائنات باستدعاء طريقة واحدة، كما هو موضح أدناه.

using System;
using System.Text.Json;
namespace DemoApplication
{
  class Tutorial
  {
    public int ID { get; set; }
    public string Name { get; set; }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Tutorial obj = new Tutorial { ID = 1, Name = ".Net" };
      string json = JsonSerializer.Serialize(obj);
      Console.WriteLine(json);

      Tutorial objnew = (Tutorial)JsonSerializer.Deserialize(json, typeof(Tutorial));
      Console.WriteLine(objnew.Name);
      Console.ReadKey();
    }
  }
}

الإخراج:

{"ID":1,"Name":".Net"}
.Net

الأسئلة الشائعة

تقوم عملية التسلسل بتحويل كائن C# إلى سلسلة من البايتات (ثنائية، أو XML، أو JSON) بحيث يمكن حفظها في ملف أو إرسالها إلى تطبيق آخر. أما عملية إلغاء التسلسل فتعيد بناء الكائن من تلك البيانات.

تُشير السمة [Serializable] إلى فئة بحيث يمكن تسلسل كائناتها. وبدونها، يُصدر التسلسل الثنائي استثناءً عند محاولة كتابة الكائن إلى ملف.

يدعم C# التسلسل الثنائي (المضغوط، .NET فقط)، وتسلسل XML عبر XmlSerializer، وتسلسل JSON عبر System.Text.Json، وتسلسل SOAP لخدمات الويب القديمة.

تقوم عملية التسلسل بكتابة بيانات الكائن إلى ملف أو دفق، بينما تقوم عملية إلغاء التسلسل بقراءة تلك البيانات مرة أخرى وإعادة بناء الكائن الأصلي في الذاكرة.

أصبح BinaryFormatter الآن قديمًا ويعتبر غير آمن لأنه يمكنه تنفيذ تعليمات برمجية ضارة أثناء عملية إلغاء التسلسل. Microsoft يوصي باستخدام System.Text.Json أو XmlSerializer للتطبيقات الجديدة.

مساعدو الذكاء الاصطناعي مثل GitHub Copilot يقومون بالإكمال التلقائي لمكالمات Serialize و Deserialize، وإضافة السمة [Serializable]، وإنشاء رمز تسلسل JSON أو XML من تعليق قصير.

نعم. تقوم الأدوات المدعومة بالذكاء الاصطناعي بإنشاء فئات النماذج، والاختيار بين تنسيقات JSON و XML والتنسيقات الثنائية، وإضافة معالجة الأخطاء بحيث يكون رمز التسلسل الخاص بك آمنًا وكاملاً.

يستخدم التسلسل الثنائي System.Runtime.Serialization.Formatters.Binary، ويستخدم JSON System.Text.Json، ويستخدم XML System.Xml.Serialization.

تلخيص هذه التدوينة بـ: