كل شيء عن التسلسل في Visual Basic

click fraud protection

التسلسل هو عملية تحويل كائن إلى تسلسل خطي من بايت يسمى "تيار البايت". إلغاء التسلسل يعكس العملية. ولكن لماذا تريد تحويل كائن إلى دفق بايت؟

السبب الرئيسي هو أنه يمكنك تحريك الكائن. النظر في الاحتمالات. نظرًا لأن "كل شيء كائن" في .NET ، يمكنك إجراء تسلسل لأي شيء وحفظه في ملف. لذلك يمكنك إجراء تسلسل للصور وملفات البيانات والحالة الحالية لوحدة البرنامج (يشبه "الحالة" أ لقطة من البرنامج في وقت ما حتى تتمكن من إيقاف التنفيذ مؤقتًا والبدء من جديد في وقت لاحق)... كل ما عليك القيام به.

يمكنك أيضًا تخزين هذه الكائنات على القرص في ملفات ، وإرسالها عبر الويب ، ونقلها إلى برنامج آخر ، والاحتفاظ بنسخة احتياطية للسلامة أو الأمان. الاحتمالات لا حصر لها حرفيا.

هذا هو السبب في أن التسلسل هو عملية أساسية في .NET و البصرية الأساسية. يوجد أدناه قسم عن التسلسل المخصص عن طريق تطبيق قابل للتسلسل واجهة والترميز أ جديد و GetObjectDataروتين فرعي.

كمثال أول للتسلسل ، فلننفذ أحدًا من أسهل البرامج ، ولكن أيضًا أحد أكثر البرامج فائدة: إجراء تسلسل للبيانات ، ثم إلغاء تسلسل البيانات في فئة بسيطة من وإلى ملف. في هذا المثال ، لا يتم تسلسل البيانات فقط ، ولكن يتم حفظ بنية البيانات أيضًا. أعلن الهيكل هنا في وحدة للحفاظ على الأشياء... حسنا... منظم.

instagram viewer

وحدة SerializeParms
ParmExample فئة عامة
Parm1Name العام باسم سلسلة = "اسم Parm1"
Parm1Value العام كـ عدد صحيح = 12345
Parm2Name العامة باسم سلسلة
Parm2Value العامة كـ عشري
نهاية الدرجة
نهاية الوحدة

ثم ، يمكن حفظ القيم الفردية في ملف مثل هذا:

نظام الواردات. مدة العرض. التسلسل. المنسقون. الثنائية
نظام الواردات. IO
الدرجة العامة Form1
Sub Sub mySerialize_Click (_
ByVal المرسل كنظام. موضوع، _
ByVal ه كنظام. EventArgs) _
يعالج mySerialize. انقر
خافت ParmData كما ParmExample جديد
ParmData. Parm2Name = "اسم Parm2"
ParmData. Parm2Value = 54321.12345
قاتمة باسم FileStream الجديد ("ParmInfo" ، FileMode. خلق)
خافت و كما BinaryFormatter جديدة
F. تسلسل (s ، ParmData)
س. قريب()
نهاية الفرعية
نهاية الدرجة

وهذه القيم نفسها يمكن استرجاعها مثل هذا:

نظام الواردات. مدة العرض. التسلسل. المنسقون. الثنائية
نظام الواردات. IO
الدرجة العامة Form1
Sub Sub myDeserialize_Click (_
ByVal المرسل كنظام. موضوع، _
ByVal ه كنظام. EventArgs) _
يعالج myDeserialize. انقر
Dim s = FileStream جديد ("ParmInfo" ، FileMode. افتح)
خافت و كما BinaryFormatter جديدة
Dim RestoredParms باسم ParmExample جديد
RestoredParms = f. إلغاء التسلسل
س. قريب()
وحدة التحكم. WriteLine (RestoredParms. Parm1Name)
وحدة التحكم. WriteLine (RestoredParms. Parm1Value)
وحدة التحكم. WriteLine (RestoredParms. Parm2Name)
وحدة التحكم. WriteLine (RestoredParms. Parm2Value)
نهاية الفرعية
نهاية الدرجة

أ بناء أو مجموعة (مثل قائمة ArrayList) بدلا من صف دراسي يمكن أيضا أن تكون متسلسلة إلى ملف بنفس الطريقة.

الآن وبعد أن تخطينا عملية التسلسل الأساسية ، دعونا نلقي نظرة على التفاصيل المحددة التي تشكل جزءًا من العملية في الصفحة التالية.

واحدة من أول الأشياء التي يجب أن تلاحظها في هذا المثال هي السمة في صف دراسي. سمات هي مجرد مزيد من المعلومات التي يمكنك تقديمها إلى VB.NET حول كائن ويتم استخدامها لكثير من الأشياء المختلفة. تخبر السمة الموجودة في هذا الرمز VB.NET بإضافة رمز إضافي بحيث يمكن إجراء تسلسل لكل شيء في هذه الفئة لاحقًا.

إذا كان هناك عناصر محددة في الفصل الذي أنت لا تريد أن تكون متسلسلة ، يمكنك استخدام السمة لاستبعادهم:

Parm3Value العامة باسم سلسلة = "مهما"

في المثال ، لاحظ أن ذلك تسلسل و إلغاء التسلسل هي طرق لل BinaryFormatter موضوع (F في هذا المثال).

F. تسلسل (s ، ParmData)

هذا الكائن يأخذ تيار ملف الكائن والكائن المراد تسلسله كمعلمات. سنرى أن VB.NET يقدم كائنًا آخر يسمح بالتعبير عن النتيجة كـ XML.

وملاحظة أخيرة ، إذا كان الكائن الخاص بك يحتوي على كائنات تابعة أخرى ، فسيتم تسلسلها أيضًا! لكن منذ الكل الكائنات المتسلسلة يجب أن تكون علامة مع السمة ، يجب تمييز كل هذه الكائنات الفرعية بهذه الطريقة أيضًا.

لمجرد أن تكون واضحًا تمامًا بشأن ما يحدث في البرنامج ، فقد ترغب في عرض الملف المسمى ParmData في المفكرة لمعرفة شكل البيانات المتسلسلة. (إذا اتبعت هذا الرمز ، فيجب أن يكون في سلة مهملات. تصحيح المجلد في مشروعك.) نظرًا لأن هذا هو ملف ثنائي ، فإن معظم المحتوى ليس نصًا قابلاً للقراءة ، ولكن يجب أن تكون قادرًا على رؤية أي سلاسل في ملفك المسلسل. سنفعل إصدار XML بعد ذلك وقد ترغب في مقارنة الاثنين لمجرد إدراك الفرق.

يتطلب إجراء تسلسل إلى XML بدلاً من ملف ثنائي تغييرات قليلة جدًا. XML ليس بالسرعة ولا يمكنه التقاط بعض معلومات الكائن ، لكنه أكثر مرونة. يمكن استخدام XML عن طريق أي تقنية برمجية أخرى في العالم اليوم. إذا كنت تريد أن تتأكد من أن هياكل ملفاتك لا "تربطك بـ" Microsoft ، فهذا خيار جيد للنظر فيه. تشدد Microsoft على "LINQ to XML" لإنشاء ملفات بيانات XML في أحدث تقنياتها ولكن لا يزال الكثير من الناس يفضلون هذه الطريقة.

في 'X' في XML لتقف على هاكسالشد. في مثال XML الخاص بنا ، سنستخدم أحد امتدادات XML ، وهي تقنية تسمى صابون. كان هذا يعني "بروتوكول الوصول إلى الكائنات البسيطة" ولكنه الآن مجرد اسم. (تمت ترقية SOAP كثيرًا بحيث لم يعد الاسم الأصلي مناسبًا تمامًا بعد الآن.)

الشيء الرئيسي الذي يتعين علينا تغييره في روتيننا الفرعي هو إلغاء تنسيق المنسق. يجب تغيير هذا في كل من روتين فرعي الذي التسلسل الكائن وتلك التي إلغاء تسلسل مرة أخرى. بالنسبة للتكوين الافتراضي ، يتضمن هذا ثلاثة تغييرات في البرنامج. أولاً ، عليك إضافة مرجع إلى المشروع. انقر بزر الماوس الأيمن فوق المشروع وحدد يضيف مرجعا .... تأكد ...

النظام. مدة العرض. التسلسل. المنسقون. صابون

... تمت إضافته إلى المشروع.

ثم قم بتغيير العبارتين في البرنامج الذي يشير إليه.

نظام الواردات. مدة العرض. التسلسل. المنسقون. صابون
قاتمة و SoapFormatter جديدة

هذه المرة ، إذا كنت تحقق من نفسه ParmData ملف في المفكرة ، سترى أن كل شيء في نص XML قابل للقراءة مثل ...

اسم Parm1
12345
الاسم Parm2
54321.12345

هناك أيضًا الكثير من XML الإضافي الذي يعد ضروريًا لمعيار SOAP في الملف أيضًا. إذا كنت تريد التحقق من ما السمة تفعل ذلك ، يمكنك إضافة متغير بهذه السمة وإلقاء نظرة على الملف للتحقق من عدم تضمينه.

المثال الذي قمنا بترميز البيانات به فقط هو التسلسل ، ولكن لنفترض أنك بحاجة إلى التحكم في كيفية إجراء تسلسل البيانات. VB.NET يمكن أن تفعل ذلك أيضا!

لتحقيق ذلك ، تحتاج إلى أن تعمق مفهوم التسلسل قليلاً. يحتوي VB.NET على كائن جديد للمساعدة هنا: SerializationInfo. على الرغم من أن لديك القدرة على ترميز سلوك التسلسل المخصص ، إلا أنه يأتي مع تكلفة ترميز إضافي.

الأساسية إضافي يظهر رمز أدناه. تذكر ، يتم استخدام هذه الفئة بدلا من ParmExample الطبقة المعروضة في المثال السابق. هذا ليس مثالا كاملا. الغرض من ذلك هو عرض الرمز الجديد المطلوب للتسلسل المخصص.

نظام الواردات. مدة العرض. التسلسل
_
تخصيص فئة عامة
تنفذ ISERializable
البيانات المتسلسلة هنا
'التسلسل العام متغير كنوع
عام جديد ()
منشئ افتراضي عند الفصل
'تم إنشاؤه - يمكن أن يكون الرمز المخصص
وأضاف هنا أيضا
نهاية الفرعية
عام فرعي جديد (_
ByVal info As SerializationInfo، _
سياق ByVal باسم StreamingContext)
تهيئة متغيرات البرنامج من
متجر بيانات متسلسل
نهاية الفرعية
GetObjectData العامة العامة (_
ByVal info As SerializationInfo، _
سياق ByVal باسم StreamingContext) _
تنفذ ISERializable. GetObjectData
تحديث مخزن البيانات المتسلسل
من متغيرات البرنامج
نهاية الفرعية
نهاية الدرجة

والفكرة هي أنه يمكنك الآن (وفي الحقيقة ، يمكنك ذلك) يجب) القيام بكل من تحديث وقراءة البيانات في مخزن البيانات التسلسلي في جديد و GetObjectData الروتين الفرعي. يجب عليك أيضا تضمين عام جديد مُنشئ (لا توجد قائمة معلمات) لأنك تنفذ واجهة.

عادة ما يكون للصف خصائص وطرق رسمية مشفرة أيضًا ...

الملكية العامة
newPropertyValue As String الخاص
الملكية العامة NewProperty () كسلسلة
احصل على
إرجاع newPropertyValue
نهاية الحصول على
تعيين (قيمة ByVal كسلسلة)
newPropertyValue = القيمة
مجموعة النهاية
نهاية الملكية
الطريقة العامة
الجمهور MyMethod ()
رمز الطريقة
نهاية الفرعية

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

ال جديد سوف الروتين الفرعي تبدو مثل هذا:

عام فرعي جديد (_
ByVal info As SerializationInfo، _
سياق ByVal باسم StreamingContext)
تهيئة متغيرات البرنامج من
متجر بيانات متسلسل
Parm1Name = معلومات. GetString ("a")
Parm1Value = معلومات. GetInt32 ("b")
'تابع جديد ...

متى إلغاء التسلسل يسمى على BinaryFormatter كائن ، يتم تنفيذ هذا الفرعية و SerializationInfo يتم تمرير الكائن إلى جديد روتين فرعي. يمكن لـ New بعد ذلك القيام بكل ما هو ضروري مع قيم البيانات المتسلسلة. فمثلا ...

MsgBox ("هذا هو Parm1Value Times Pi:" _
& (Parm1Value * Math). PI). ToString)

يحدث العكس عندما تسلسل يسمى ، ولكن BinaryFormatter وجوه يدعو GetObjectData في حين أن.

GetObjectData العامة العامة (_
ByVal info As SerializationInfo، _
سياق ByVal باسم StreamingContext) _
تنفذ ISERializable. GetObjectData
تحديث مخزن البيانات المتسلسل
من متغيرات البرنامج
إذا Parm2Name = "اختبار" ثم
معلومات AddValue ("a" ، "هذا اختبار.")
آخر
معلومات AddValue ("a" ، "No test this time.")
إنهاء إذا
معلومات AddValue ("b" ، 2)

لاحظ أنه يتم إضافة البيانات إلى الملف المتسلسل كأزواج اسم / قيمة.

يبدو أن الكثير من صفحات الويب التي وجدتها في كتابة هذا المقال لا تحتوي على كود فعلي. يتساءل المرء عما إذا كان المؤلف قد نفذ أي رمز فعليًا قبل كتابة المقال في بعض الأحيان.

instagram story viewer