Bosh sahifa Wiki Serialization

Serialization

Serialization — object, ma’lumotlar tuzilmasi yoki dastur state’ini saqlash yoki uzatish mumkin bo‘lgan ketma-ket formatga aylantirish jarayoni.

Natija:

ko‘rinishida bo‘lishi mumkin.

Qarama-qarshi jarayon deserialization deb ataladi.

Maqsad

Memory ichidagi object pointer, runtime metadata va processga xos tuzilishga ega.

Uni tarmoq yoki diskka to‘g‘ridan-to‘g‘ri yozish portable emas.

Serialization objectning kerakli fieldlarini standard formatga o‘tkazadi.

Qo‘llanishlar:

Text format

Keng tarqalgan text formatlar:

Afzalliklari:

  • inson o‘qiydi;
  • debugging oson;
  • ko‘p til qo‘llaydi;
  • diff qulay.

Kamchiliklari:

  • hajm kattaroq;
  • parse xarajati;
  • type aniqligi cheklangan;
  • whitespace va encoding.

Binary format

Binary formatlar:

Afzalliklari:

  • ixcham;
  • tez;
  • aniq type;
  • schema evolution;
  • kam bandwidth.

Kamchiliklari:

  • maxsus decoder;
  • inson ko‘zi bilan o‘qish qiyin;
  • schema yoki specification talab qilinadi.

Schema

Schema field nomi, type va qoidalarni belgilaydi.

Misol:

id: integer
name: string
active: boolean

Schema:

  • required;
  • optional;
  • default;
  • range;
  • nested object;
  • array;
  • enum

ni ifodalashi mumkin.

Schema mavjud bo‘lmagan self-describing format ham application contractiga ega.

Field mapping

Domain objectni to‘g‘ridan-to‘g‘ri serialize qilish ichki modelni public contractga aylantirishi mumkin.

Alohida DTO:

  • kerakli fieldlarni tanlaydi;
  • nomlarni barqaror saqlaydi;
  • maxfiy fieldni chiqarib tashlaydi;
  • versioningni boshqaradi.

Database entity, domain object va API message bir xil bo‘lishi shart emas.

Type conversion

Runtime type format type’iga moslashtiriladi.

Masalan:

  • date → ISO string yoki epoch;
  • decimal → string yoki number;
  • UUID → text yoki 16 bayt;
  • enum → nom yoki integer;
  • binary → Base64;
  • map key → string.

Format tanlovi precision va compatibility’ga ta’sir qiladi.

Date va vaqt

Date serialization aniq qoidaga ega bo‘lishi kerak:

2026-07-14 faqat sana, 2026-07-14T09:30:00+05:00 esa offsetli vaqt.

Naive local datetime distributed tizimda noaniq.

Floating-point

JSON number IEEE 754 double sifatida talqin qilinishi mumkin.

Katta integer va decimal precision yo‘qolishi ehtimoli bor.

Moliyaviy qiymat:

  • integer minor unit;
  • decimal string;
  • schema decimal type

bilan ifodalanishi mumkin.

Null va missing

Field mavjud va null bo‘lishi bilan field umuman yo‘qligi boshqa ma’noga ega bo‘lishi mumkin.

Masalan, patch requestda:

  • missing — o‘zgartirma;
  • null — qiymatni tozala.

Serializer va schema bu farqni saqlashi kerak.

Reference

Object graph’da bir object bir necha joydan reference qilinishi yoki cycle bo‘lishi mumkin.

Oddiy tree format:

  • objectni takrorlaydi;
  • cycle’da cheksiz yuradi.

Yechimlar:

  • ID reference;
  • cycle detection;
  • graph format;
  • ignore;
  • max depth.

Polymorphism

Base type fieldida turli subtype bo‘lsa, type discriminator kerak bo‘lishi mumkin.

{
  "type": "circle",
  "radius": 5
}

Untrusted inputdagi arbitrary class nomini to‘g‘ridan-to‘g‘ri runtime type’ga aylantirish xavfli.

Allowlist va explicit mapping ishlatiladi.

Versioning

Serialized data uzoq saqlanishi yoki turli service versiyalari orasida yurishi mumkin.

Mos o‘zgarishlar:

  • yangi optional field;
  • unknown fieldni e’tiborsiz qoldirish;
  • default;
  • field IDni qayta ishlatmaslik;
  • enum unknown qiymat.

Field rename va type o‘zgarishi migration talab qilishi mumkin.

Deterministik serialization

Bir xil object har safar aynan bir xil baytlar yaratishi kerak bo‘lgan holatlar mavjud:

Map tartibi, float, whitespace va default fieldlar canonical qoida bilan boshqariladi.

Compression

Serialized payload keyin compression qilinishi mumkin.

object → serialization → compression → encryption

Qabulda teskari tartib.

Compression format semantikasini emas, hajmni o‘zgartiradi.

Encryption

Serialization maxfiylik bermaydi.

JSONni binary qilish yoki Base64ga o‘tkazish encryption emas.

Maxfiy data uchun:

kerak.

Maxfiy field

Serializer tasodifan:

ni chiqarishi mumkin.

Explicit allowlist yoki DTO xavfsizroq.

Log serialization uchun redaction alohida qo‘llanadi.

Performance

Serialization xarajati:

dan iborat.

Katta oqim streaming yoki zero-copyga yaqin format bilan qayta ishlanishi mumkin.

Benchmark real payload bilan bajariladi.

Security

Untrusted inputga mos serializer outputi ham xavf tug‘dirishi mumkin:

Serialization escaping faqat o‘z formatiga tegishli. Keyingi context uchun alohida encoding zarur.

Streaming serialization

Katta collection elementlari ketma-ket yozilib, barcha objectni bitta ulkan bufferga yig‘ish talab qilinmaydi. Output stream backpressure yoki I/O xatosini qaytarishi mumkin.

Field order

JSON object field tartibi ko‘pincha semantik ahamiyatga ega emas. Ammo snapshot, hash yoki inson o‘qishi uchun serializer barqaror tartib berishi mumkin.

Default qiymat

Format hajmini kamaytirish uchun default field yozilmasligi mumkin. Receiver schema defaultini bilishi kerak. Default keyin o‘zgarsa eski saqlangan xabar boshqa ma’no olmasligi uchun versioning ehtiyotkorlik bilan qilinadi.

Bog‘liq tushunchalar

Deserialization, JSON, XML, Protocol Buffers, Schema, DTO, Encoding, Canonicalization, Data format, Message