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:
Kamchiliklari:
- hajm kattaroq;
- parse xarajati;
- type aniqligi cheklangan;
- whitespace va encoding.
Binary format
Binary formatlar:
- Protocol Buffers;
- MessagePack;
- CBOR;
- Avro;
- FlatBuffers;
- custom protocol.
Afzalliklari:
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
- 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:
- time zone;
- UTC offset;
- precision;
- calendar;
- format;
- leap second policy.
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:
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:
- transport TLS;
- storage encryption;
- field-level encryption;
- key management
kerak.
Maxfiy field
Serializer tasodifan:
- password;
- token;
- private key;
- internal note;
- personal data
ni chiqarishi mumkin.
Explicit allowlist yoki DTO xavfsizroq.
Log serialization uchun redaction alohida qo‘llanadi.
Performance
Serialization xarajati:
- reflection;
- allocation;
- encoding;
- copying;
- compression;
- schema lookup
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