Muallif
June 13, 2024
178Serializatsiya deganda obyektni baytli streamga o'girish tushiniladi. Asosiy ahamiyati ob'ekt holatini saqlash va kerak bo'lganda uni tiklashdan iborat. Serializatsiya qilingan o'byekt haqidagi ma'lumotlar streamda saqlanadi, bunda faqat o'byekt qiymatlarigina emas ob'yekt tipi, uning versiyasi, nom
Serializatsiya yordamida obyekt holatini saqlab boorish, lozim bo'lganda turli ob'yektlar bilan ma'lumot almashinish, web – servislar orqali boshqa applicationga ob'ektni yuborish, ob'ektni XML satr ko'rinishda bir domendan boshqasiga yuborish mumkin.
Ob'ektni serializatsiya qilish uchun o'byekt, ob'yekt serializatsiya qilinishi uchun stream va Formatter lozim bo'ladi. C# da System.Runtime.Serialization – ob'ektni serializatsiya va deserializatsiya qilish uchun ishlatiladigan classlardan tashkil topgan. "using" bo'limiga System.Runtime.Serialization ni qo'shib qo'yish lozim. Ob'ektdagi atributlar serializatsiya bo'lishi uchun SerializableAttribute tipida bo'lishi mumkin, bu tipda bo'lmagan atributlarni serializatsiya qilishda yuzaga keladigan xatoliklarni SerializationException yordamida qayta ishlash mumkin. Agar ob'yet sinfi ichidagi bironta maydonning serializatsiya bo'lmasligini xoxlasangiz unga NonSerializedAttribute atributini qo'llash mumkin.
Serializatsiyada ikkilik yoki XML serializatsiyalardan foydalanish mumkin. Ikkilik serializatsiyada ob'yekt tushinarsiz mashina kodiga o'girilgan holatga o'tkaziladi, XML serializatsiyada esa ob'yekt XML ko'rinishda serializatsiyalandi va uni boshqa applicationda to'g'ridan to'g'ri foydalanish mumkin bo'ladi. Ikkilik ko'rinishdagi serializatsiya ko'p holatda socket orqali ishlaganda ishlatiladi.
Endi serializatsiya ve deserializatsiyani quyidagi "Telefonlar kitobi (Phone book)"dasturi misolida ko'rib chiqamiz:
C# DTning Consule Application tipidagi yangi Project yaratamiz, va unda TelNumberType enum, TelNumber sinf, Contact sinf, PhoneBook sinfini quyidagi tartibda yaratamiz:
TelNumberType:
internal enum TelNumberType { UyNomeri, IshNomeri, FaxNomeri }
TelNumber:
[Serializable()] internal class TelNumber { public int Id { get; set; } public TelNumberType Type { get; set; } public string Number { get; set; } }