لقد أدركت Microsoft أهمية البيانات المتسلسلة، لذلك قامت بتضمين مساحة الاسم System.Runtime.Serialization وSystem.Xml.Serialization في إطار عمل .NET لتوفير وظائف التسلسل وتزويد المستخدمين بالقدرة على كتابة إطار عمل خاص بهم . توفر مساحة الاسم System.Xml.Serialization الأساليب الأساسية لإجراء تسلسل كائن إلى تنسيق XML. دعونا نلقي نظرة على كيفية استخدام هذه الطريقة.
سحر XML
يشير XML المتسلسل إلى عملية حفظ الحقول والسمات العامة لكائن ما في تنسيق تسلسلي (هنا تنسيق XML) لسهولة التخزين أو النقل. إلغاء التسلسل هو عملية استخدام معلومات الحالة التسلسلية لاستعادة كائن من حالة XML التسلسلية إلى حالته الأصلية. لذلك، يمكنك التفكير في التسلسل كوسيلة لحفظ حالة الكائن في دفق أو مخزن مؤقت.
الغرض من التسلسل هو تخزين البيانات وتحويل البيانات. يشير تخزين البيانات إلى حفظ البيانات عبر جلسات المستخدم. عند إغلاق التطبيق، يتم حفظ البيانات (تسلسلها) وعندما يعود المستخدم، تتم إعادة تحميل البيانات (إلغاء تسلسلها). يشير تحويل البيانات إلى تحويل البيانات إلى تنسيق يمكن لنظام آخر فهمه. باستخدام التسلسل وXML، يمكن إجراء تحويل البيانات بسهولة.
يمكن أن تكون البيانات الموجودة في الكائن فئة أو أسلوب أو خاصية أو نوع خاص أو صفيف أو حتى XML مضمن في كائن System.Xml.XmlElement أو System.Xml.XmlAttribute.
فئة المفتاح في مساحة الاسم System.Xml.Serialization هي XmlSerializer. بالطبع، تتضمن مساحة الاسم هذه أيضًا فئات أخرى تتعلق بجوانب أخرى من XML وSOAP، ولكن تركيزنا ينصب على فئة XmlSerializer.
XmlSerializer
توفر فئة XmlSerializer طرقًا لإجراء تسلسل للكائنات في ملفات XML وإلغاء تسلسل مستندات XML إلى كائنات. كما يسمح للمستخدمين بتحديد كيفية تحويل الكائنات إلى XML. يمكنك تمرير نوع الكائن المراد إجراء تسلسل له كمعلمة إلى مُنشئ الفئة. يوضح رمز C# التالي استخدام المنشئ.
XmlSerializer ser = new XmlSerializer(typeof(objectToSerialize));
فيما يلي رمز VB.NET المكافئ:
Dim ser As New XmlSerializer(GetType(objectToSerialize))
يتم تنفيذ عملية التسلسل الفعلية في طريقة Serialize لفئة XmlSerializer. تسمح هذه الطريقة باستدعاء كائنات TextWriter وStream وXmlWriter أثناء عملية التسلسل. يوضح رمز المثال التالي كيفية استدعاء هذا الأسلوب. في هذا المثال يتم إجراء تسلسل لكائن وحفظه في ملف على القرص المحلي. يبدأ المثال بإعلان الفئة، متبوعًا بكود المصدر المتسلسل.
باستخدام النظام؛
مساحة الاسم BuilderSerialization {
عنوان الفئة العامة {
العنوان العام () {}
عنوان السلسلة العامة 1؛
عنوان السلسلة العامة 2؛
مدينة السلسلة العامة؛
حالة السلسلة العامة؛
سلسلة عامة الرمز البريدي؛
دولة السلسلة العامة؛
} }
باستخدام النظام؛
مساحة الاسم BuilderSerialization {
مؤلف الطبقة العامة {
المؤلف العام () { }
سلسلة عامة الاسم الأول؛
السلسلة العامة الاسم الأوسط؛
سلسلة عامة اسم العائلة؛
عنوان السلسلة العامة؛
سلسلة عامة الجنس؛
العنوان العام AddressObject;
} }
مساحة الاسم BuilderSerialization {
كتاب الطبقة العامة {
كتاب عام () { }
عنوان السلسلة العامة؛
كائن المؤلف العام؛
سلسلة عامة رقم ISBN؛
سعر التجزئة المزدوج العام؛
ناشر السلسلة العامة؛
}}
باستخدام النظام؛
باستخدام System.Xml.Serialization؛
باستخدام System.IO؛
مساحة الاسم BuilderSerialization {
فئة الاختبار {
الفراغ الثابت الرئيسي (سلسلة [] الحجج) {
Book BookObject = new Book();
XmlSerializer ser = new XmlSerializer(typeof(Book));
كاتب النص = جديد StreamWriter("booktest.xml");
BookObject.Title = "LotusScript العملي";
BookObject.ISBN = "1884777767";
BookObject.Publisher = "إدارة المنشورات";
BookObject.RetailPrice = 43.95;
BookObject.AuthorObject = new Author();
BookObject.AuthorObject.FirstName = "توني";
BookObject.AuthorObject.LastName = "باتون";
BookObject.AuthorObject.Gender = "ذكر";
BookObject.AuthorObject.AddressObject = new Address();
BookObject.AuthorObject.AddressObject.Address1 = "1 الشارع الرئيسي";
BookObject.AuthorObject.AddressObject.City = "في أي مكان";
BookObject.AuthorObject.AddressObject.State = "KY";
BookObject.AuthorObject.AddressObject.Zip = "40000";
BookObject.AuthorObject.AddressObject.Country = "USA";
ser.Serialize(writer, BookObject);
الكاتب. إغلاق ()؛
} } }
يقوم التعليمة البرمجية أعلاه بتحويل ثلاثة كائنات إلى كائن واحد، وبالتالي إنشاء ملف XML أثناء عملية التسلسل. فيما يلي مستند XML الذي تم إنشاؤه بواسطة البرنامج النموذجي:
<?xml version="1.0" encoding="utf-8"?>
<الكتاب xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance ">
<Title>LotusScript العملي</Title>
<كائن المؤلف>
<الاسم الأول>توني</الاسم الأول>
<LastName>باتون</LastName>
<الجنس>ذكر</الجنس>
<كائن العنوان>
<العنوان1>1 الشارع الرئيسي</Address1>
<مدينة>في أي مكان</مدينة>
<الدولة>كي</الدولة>
<Zip>40000</Zip>
<الدولة>الولايات المتحدة الأمريكية</البلد>
</عنوان الكائن>
</المؤلف>
<ISBN>1884777767 </ISBN>
<RetailPrice>43.95</RetailPrice>
<Publisher>إدارة المنشورات</Publisher>
</Book>
لاحظ أن عملية التسلسل يمكنها أيضًا التعامل مع تداخل بيانات الكائن. يتم تحويل البيانات إلى تنسيق يمكن التعرف عليه، مما يسهل إعادة تحميل البيانات (إلغاء التسلسل) ونقل البيانات إلى نظام آخر. أثناء عملية نقل البيانات، يحتاج النظام المتلقي إلى معرفة تنسيق ملف XML (إذا لم يكن يعرفه مسبقًا). لذلك، يجب توفير ملف مخطط XML. يمكن لأداة XSD.exe الموجودة في .NET Framework إنشاء ملف مخطط لـ XML المتسلسل.
ما يلي هو مثال للتعليمات البرمجية المكتوبة في VB.NET:
عنوان الفئة العامة
العنوان العام 1 كسلسلة
العنوان العام 2 كسلسلة
المدينة العامة كسلسلة
الحالة العامة كسلسلة
الرمز البريدي العام كسلسلة
البلد العام كسلسلة
نهاية الفصل
مؤلف الطبقة العامة
الاسم الأول العام كسلسلة
الاسم الأوسط العام كسلسلة
اسم العائلة العام كسلسلة
العنوان العام كسلسلة
الجنس العام كسلسلة
كائن العنوان العام كعنوان
نهاية الفصل
كتاب الطبقة العامة
كائن المؤلف العام كمؤلف
العنوان العام كسلسلة
رقم ISBN العام كسلسلة
سعر التجزئة العام مزدوج
الناشر العام كسلسلة
نهاية الفصل
واردات System.Xml.Serialization
ImportsSystem.IO
الوحدة النمطية1
فرعي رئيسي()
كائن كتاب خافت ككتاب جديد
Dim ser As New XmlSerializer(GetType(Book))
الكاتب الخافت كـ StreamWriter الجديد("booktest.xml")
مع كائن الكتاب
.Title = "LotusScript العملي"
رقم ISBN = "1884777767"
.Publisher = "منشورات مانينغ"
سعر التجزئة = 43.95
.AuthorObject = مؤلف جديد
.AuthorObject.FirstName = "توني"
.AuthorObject.LastName = "باتون"
.AuthorObject.Gender = "ذكر"
.AuthorObject.AddressObject = عنوان جديد
.AuthorObject.AddressObject.Address1 = "1 الشارع الرئيسي"
.AuthorObject.AddressObject.City = "في أي مكان"
.AuthorObject.AddressObject.State = "KY"
.AuthorObject.AddressObject.Zip = "40000"
.AuthorObject.AddressObject.Country = "الولايات المتحدة الأمريكية"
نهاية مع
ser.Serialize (كاتب، BookObject)
الكاتب.إغلاق()
نهاية الفرعية
مخرجات التحكم
في الوحدة النهائية
تقوم عملية التسلسل بإنشاء ملفات XML قياسية ويتم تحويل أعضاء البيانات إلى عناصر XML. ومع ذلك، لا يصبح جميع أعضاء البيانات عناصر. يمكنك التحكم في ملف XML الناتج عن طريق إضافة بعض العلامات في رمز الفئة. بهذه الطريقة، يمكن تحويل أعضاء البيانات إلى سمات XML بدلاً من العناصر، أو ببساطة تجاهلها. المثال التالي هو كود VB.NET لفئة الكتاب المعدلة.
كتاب الطبقة العامة
كائن المؤلف العام كمؤلف
العنوان العام كسلسلة
<System.Xml.Serialization.XmlAttribute()> _
رقم ISBN العام كسلسلة
<System.Xml.Serialization.XmlIgnoreAttribute()> _
سعر التجزئة العام مزدوج
الناشر العام كسلسلة
نهاية الفئة
يخبر هذا الرمز النظام باستخدام رقم ISBN لعضو الفئة كسمة XML عند إنشاء ملف XML، وتجاهل عضو RetailPrice. يمكن رؤية هذا التغيير في ملف XML الذي تم إنشاؤه:
<?xml version="1.0" encoding="utf-8"?>
<الكتاب xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " رقم ISBN = "1884777767 ">
<كائن المؤلف>
<الاسم الأول>توني</الاسم الأول>
<LastName>باتون</LastName>
<الجنس>ذكر</الجنس>
<كائن العنوان>
<العنوان1>1 الشارع الرئيسي</العنوان1>
<مدينة>في أي مكان</مدينة>
<الدولة>كي</الدولة>
<Zip>40000</Zip>
<الدولة>الولايات المتحدة الأمريكية</البلد>
</عنوان الكائن>
</المؤلف>
<Title>LotusScript العملي</Title>
<Publisher>إدارة المنشورات</Publisher>
</Book>
ما يلي هو رمز C# المقابل:
public class Book {
كتاب عام () { }
عنوان السلسلة العامة؛
كائن المؤلف العام؛
[System.Xml.Serialization.XmlAttribute()]
سلسلة عامة رقم ISBN؛
[System.Xml.Serialization.XmlIgnoreAttribute()]
سعر التجزئة المزدوج العام؛
ناشر السلسلة العامة؛
}
ما ورد أعلاه يذكر بإيجاز اثنين فقط من رموز العلامات. الرجاء مراجعة وثائق .NET للحصول على تدوين الترميز الكامل.
يمكن تحقيق إلغاء تسلسل البيانات التي تم إلغاء تسلسلها بسهولة عن طريق استدعاء طريقة إلغاء التسلسل لفئة XmlSerializer. يكمل جزء برنامج VB.NET التالي عملية إلغاء تسلسل مستند XML المذكور أعلاه:
Dim BookObject As New Book
Dim ser As New XmlSerializer(GetType(Book))
Dim fs كنظام جديد.IO.FileStream("booktest.xml"، FileMode.Open)
قارئ خافت كنظام جديد.XML.XmlTextReader(fs)
BookObject = CType(ser.Deserialize(reader), Book)
يقوم هذا البرنامج بوضع البيانات الناتجة في الذاكرة لاستخدامها لاحقًا. إليك رمز C# المكافئ:
XmlSerializer ser = new XmlSerializer(typeof(Book));
System.IO.FileStreamfs = جديد System.IO.FileStream("booktest.xml"،
FileMode.Open);
System.Xml.XmlTextReader Reader = جديد System.Xml.XmlTextReader(fs);
Book BookObject = (Book)(ser.Deserialize(reader));
-------------------------------------------------- -
نبذة عن المؤلف: توني باتون هو مطور تطبيقات محترف يتمتع بمعرفة واسعة وهو معتمد في Java وVB وLotus وXML.