Кіріспе
Компьютерлік деректерді түрлендіру процесі
деректер құрылымын кодтау
data structure encoding
Компьютерлік есептемелерде, серияландыру (немесе сериалдау) – деректер құрылымын немесе объектінің күйін сақтауға (мысалы, екіншілік сақтау құрылғыларындағы файлдар, біріншілік сақтау құрылғыларындағы дерек буферлері) немесе таратуға (мысалы, компьютерлік желілердегі дерек ағындары) және кейіннен қалпына келтіруге болатын форматқа аудару процесі (мүмкін, басқа компьютерлік ортада). Серияландыру форматы бойынша алынған биттер тізбесі оқылғанда, бастапқы объектінің семантикалық тұрғыдан толықтай бірдей көшірмесін жасауға болады. Сілтемелерді кеңінен пайдаланатын күрделі объектілер үшін бұл процесс тікелей болмайды. Объектілерді серияландыру олардың бұрын байланысты болған әдістерін қамтымайды. Кейбір жағдайларда, объектіні серияландыру процесін маршалдау деп те атайды. Байттар тізбесінен деректер құрылымын алу операциясы – десериализация (немесе десериалдау, unmarshalling) деп аталады.
Кемшіліктері
Серілендіру абстрактілі деректер типінің жасырындығын бұзады, осы арқылы жеке іске асыру егжей-тегжейлерін ашу мүмкіндігі туындайды. Барлық дерек мүшелерін серілендіретін қарапайым іске асырулар инкапсуляция принципін бұзуы мүмкін. Бәсекелестерге үйлесімді өнімдер жасаудан ауыз ашпау үшін, меншік бағдарламалық жасақтаманы шығарушылар өз бағдарламаларының серілендіру форматтарының егжей-тегжейін коммерциялық құпия ретінде сақтайды. Кейбіреулері серілендірілген деректерді қасақана жасырады, тіпті шифрлайды. Дегенмен, өзара қарым-қатынас үшін қолданбалар бір-бірінің серілендіру форматтарын түсінуі қажет. Сондықтан, CORBA сияқты қашықтықтан әдіс шақыру архитектуралары өздерінің серілендіру форматтарын толыққанды анықтайды. Көптеген мекемелер, мысалы, мұрағаттар мен кітапханалар, өздерінің резервтік архивтерін болашаққа сақтап қалуға тырысады – әсіресе дерекқорының сақтық көшірмелерін – оларды салыстырмалы түрде адам оқи алатын серілендірілген форматта сақтау арқылы.
Сериялау пішімдері
1980 жылдардың басында Xerox Network Systems Courier технологиясы алғашқы кеңінен қабылданған стандартқа әсер етті. Sun Microsystems компаниясы 1987 жылы Сыртқы деректерді бейнелеу (XDR) жүйесін жариялады. XDR ашық формат болып табылады және STD 67 (RFC 4506) ретінде стандартталған. 1990 жылдардың соңында стандартты тізбектеу протоколдарына балама ұсынуға тырысқандар көбейді: XML, SGML жиынтығының бір бөлігі ретінде, адам оқи алатын мәтіндік кодтауды жасау үшін пайдаланылды. Мұндай кодтау адамдар оқи алатын және түсіне алатын, сондай-ақ бағдарламалау тіліне тәуелді болмайтын басқа жүйелерге жіберілетін тұрақты объектілер үшін пайдалы. Бұл кодтаудың байт ағынына негізделген ықшам кодтауды жоғалтуының кемшілігі бар, бірақ осы кезде сақтау және беру мүмкіндіктерінің артуы файл өлшемін компьютерлердің алғашқы жылдарындағыдай маңызды етпеді. 2000 жылдары XML көбінесе Ajax веб-қосымшаларында клиент пен сервер арасында құрылымдалған деректерді асинхронды түрде беру үшін қолданылды. XML ашық формат болып табылады және W3C ұсынысы ретінде стандартталған. JSON – XML-ге қарапайым мәтіндік балама, сонымен қатар веб-қосымшаларда клиент-сервер байланысы үшін де қолданылады. JSON JavaScript синтаксисіне негізделген, бірақ JavaScript-тен тәуелсіз және көптеген басқа бағдарламалау тілдерінде қолдауға ие. JSON ашық формат, STD 90, ECMA 404 және ISO/IEC 21778:2017 ретінде стандартталған. YAML – JSON-ның кеңейтілген түрі және дерек типінің тегтері, циклдық деректер құрылымдарын қолдау, енгізуге сезімтал синтаксис және скалярлық деректердің әртүрлі түрлерін қоса алғанда, қосымша мүмкіндіктерді қамтиды. YAML ашық формат. Меншік тізімдері NeXTSTEP, GNUstep, macOS және iOS жүйелерінде деректерді тізбектеу үшін қолданылады. Property list, немесе қысқаша p list, бір ғана тізбектеу форматына емес, бірнеше түрлі нұсқаларға сілтеме жасайды, олардың кейбіреулері адам оқи алатын, ал бірі екілік форматта. Ұлы көлемді ғылыми деректер жиынтығы үшін, мысалы, спутниктік деректер және сандық климат, ауа райы немесе мұхит модельдерінің нәтижелері үшін, арнайы екілік тізбектеу стандарттары әзірленді, мысалы, HDF, netCDF және ескі GRIB.
Бағдарламалау тілдерін қолдау
Бірнеше объектіге бағытталған бағдарламалау тілдері объектілерді серияландыруды (немесе объектілерді архивтеуді) тікелей қолдайды, әлде синтаксистік жеңілдетулер арқылы, әлде осы мақсатта стандартты интерфейс ұсынады. Бұған Ruby, Smalltalk, Python, PHP, Objective C, Delphi, Java және .NET тілдер отбасы жатады. Сонымен қатар, түпкілікті түрде серияландыруды қолдамайтын тілдерге осы мүмкіндікті қосатын кітапханалар да бар.
C және C++
C және C++ тілдері сериалдастыруды жоғары деңгейдегі құрылым ретінде ұсынбайды, бірақ екі тіл де кіріктірілген дерек түрлерін және қарапайым дерек құрылымдарын екілік дерек түрінде жазуды қолдайды. Сондықтан, арнайы сериалдастыру функцияларын жазу көбінесе оңай шаруа. Сонымен қатар, компиляторға негізделген шешімдер, мысалы, C++ үшін ODB ORM жүйесі және C және C++ үшін gSOAP құралдар жиынтығы, сынып жарияланымдарына аз немесе ешқандай өзгеріс енгізбей, автоматты түрде сериалдастыру кодын жасауға қабілетті. Басқа да танымал сериалдастыру фреймворктері: Boost Framework-тен Boost.Serialization, S11n және Cereal. MFC фреймворкі (Microsoft) де өз Document View архитектурасының бір бөлігі ретінде сериалдастыру әдістемесін ұсынады.
CFML
CFML деректер құрылымдарын <cfwddx> тегі арқылы WDDX форматына және SerializeJSON функциясы арқылы JSON форматына түрлендіруге мүмкіндік береді.
Дельфи
Delphi компоненттерді (тұрақты объектілер деп те аталады) сериялауға арналған енгізілген механизмді ұсынады, ол IDE-мен толық интеграцияланған. Компоненттің мазмұны DFM файлына сақталады және жүктелу кезінде қайта жүктеледі.
Жүре беріңіз
Go тікелей JSON және XML деректерін ашу/құрастыруды қолдайды. YAML және протокол буферлерін қолдайтын үшінші тарап модульдері де бар. Go Gobs-ты да қолдайды.
Хаскелл
Haskell-де Read және Show типтік кластардың мүшелері болып табылатын типтер үшін деректерді сақтау қолдау көрсетіледі. Read типтік класының мүшесі болып табылатын әрбір тип, сақталған деректердің жол түрінен деректерді алуға арналған функцияны анықтайды. Show типтік класы, өз кезегінде, объектінің жол түрін жасауға мүмкіндік беретін show функциясын қамтиды. Бағдарламашы функцияларды тікелей анықтаудың қажеті жоқ – тек типті Read немесе Show кластарынан шығару арқылы, немесе екеуінен де, компилятор көп жағдайда қажетті функцияларды автоматты түрде жасауына мүмкіндік береді (бірақ барлық жағдайларда емес: мысалы, функция типтері үшін Show немесе Read автоматты түрде жасалмайды). Show класы үшін автоматты түрде құрылған мысал жарамды бастапқы кодты да тудырады, сондықтан бірдей Haskell мәнін, мысалы, Haskell интерпретаторында show функциясы арқылы жасалған кодты орындау арқылы да алуға болады. Деректерді сақтауды тиімдірек ету үшін, бинарлық форматта жоғары жылдамдықты сақтауға мүмкіндік беретін Haskell кітапханалары бар, мысалы binary.
Жава
Java автоматты сериалдастыруды қамтамасыз етеді, бұл объектіні тиісті интерфейсті жүзеге асыру арқылы белгілеуді қажет етеді. Интерфейсті жүзеге асыру класты "сериалдастыруға болады" деп белгілейді, содан кейін Java сериалдастыруды ішкі түрде өңдейді. Serializable интерфейсінде сериалдастыру әдістері анықталмаған, бірақ сериалдастырылатын класс белгілі бір арнайы атаулармен және параметрлермен әдістерді қосымша анықтауы мүмкін, егер олар анықталған болса, сериалдастыру/десериалдастыру процесінің бөлігі ретінде шақырылады. Тіл сонымен қатар әзірлеушіге басқа интерфейсті, Externalizable интерфейсін жүзеге асыру арқылы сериалдастыру процесін толығырақ басқаруға мүмкіндік береді, ол объектінің күйін сақтау және қалпына келтіру үшін қолданылатын екі арнайы әдіс қамтиды. Объектілердің әдепкі бойынша сериалдастырылмауының үш негізгі себебі бар және Java сериалдастыру механизміне қол жеткізу үшін Serializable интерфейсін жүзеге асыру қажет. Біріншіден, барлық объектілер сериалданған күйде пайдалы семантиканы сақтамайды. Мысалы, Thread класы ағымдағы JVM күйіне байланысты. Десериалданған Thread класы үшін пайдалы семантиканы сақтайтын контекст жоқ. Екіншіден, объектінің сериалданған күйі оның класының үйлесімділік шартының бөлігін құрайды. Сериалдастырылатын кластардың нұсқалары арасындағы үйлесімділікті сақтау үшін қосымша күш-жігер мен назар қажет. Сондықтан, класты сериалдастыру – бұл әдейі жасалған жобалау шешімі, әдепкі шарт емес. Соңғысы, сериалдастыру басқаша қол жетімсіз кластың уақытша емес жеке мүшелеріне қол жеткізуге мүмкіндік береді. Құпиялы ақпаратты (мысалы, құпия сөзді) қамтитын кластар сериалдастырылмауы немесе сыртқы ортаға шығарылмауы керек. Стандартты кодтау әдісі объектінің кластық сипаттамасын және сериалдастырылатын өрістерін байт ағынына рекурсивті түрде түрлендіреді. Бастапқы типтер, сондай-ақ уақытша емес, статикалық емес сілтемеленген объектілер ағынға кодталады. Сериалданған объектінің өтпелі емес өрісі арқылы сілтеме жасалатын әрбір объекті де сериалдастырылуы керек; егер өтпелі емес объектілердің толық графигіндегі кез келген объекті сериалдастырылмаса, сериалдастыру сәтсіз аяқталады. Әзірлеуші объектіні өтпелі деп белгілеу арқылы немесе объектінің сериалдастыруын қайта анықтау арқылы осы мінез-құлыққа әсер ете алады, соның салдарынан сілтемелік графиктің бір бөлігі қысқартылып, сериалдастырылмайды. Java объектілерді сериалдастыру үшін конструкторды пайдаланбайды. Java объектілерін JDBC арқылы сериалдастырып, деректер базасына сақтауға болады. Swing компоненттері Serializable интерфейсін жүзеге асырғанымен, олардың Java виртуалды машинасының әртүрлі нұсқалары арасында тасымалданатындығына кепілдік жоқ. Осылайша, Swing компоненті немесе одан мұра алған кез келген компонент байт ағынына сериалдастырылуы мүмкін, бірақ оның басқа машинада қайта құрастырылатынына кепілдік берілмейді.
JavaScript-ті қолдану
ECMAScript 5.1 нұсқасынан бастап JavaScript құрамына JSON нысаны және оның JSON.parse және JSON.stringify әдістері енгізілген. JSON бастапқыда JavaScript тілінің бір бөлігіне негізделгенімен, JSON жарамды емес JavaScript жағдайлары да бар. Атап айтқанда, JSON тырнақшалар ішіндегі мәтіндерде қашпаған Юникод жол аяқтағыштарын (\u2028 және \u2029) пайдалануға рұқсат береді, бірақ ECMAScript 2018 және одан бұрынғы нұсқаларында мұндай мүмкіндік жоқ. JSON туралы толық мақаланы қараңыз.
Джулия
Julia деректерді сақтауды сақтау / қалпына келтіру модульдері арқылы іске асырады, олар Julia-ның бірдей нұсқасында және/немесе бір жүйелік бейненің бір данасында жұмыс істеуге бағытталған. HDF5.jl пакеті құжатталған форматты және әртүрлі тілдер үшін интерфейстері бар жалпы кітапхананы пайдалана отырып, көбірек сенімді балама ұсынады, ал стандартты сақтау форматы желілік байланыс үшін максималды өнімділікті қамтамасыз ету мақсатында жасалған болуы мүмкін.
Лиспа
Жалпы алғанда, Lisp дерек құрылымын "оқу" және "басып шығару" функциялары арқылы сақтауға болады. Мысалы, массивтер тізімін қамтитын foo айнымалысы (print foo) арқылы басып шығарылады. Сол сияқты, s деп аталатын ағыннан объектіні (read s) арқылы оқуға болады. Lisp жүзеге асыруының осы екі бөлігі Printer және Reader деп аталады. "Басып шығарудың" нәтижесі адам оқи алатындай болады; ол жақшалармен бөлінген тізімдерді пайдаланады, мысалы: Lisp-тің көптеген түрлерінде, соның ішінде Common Lisp, принтер деректердің барлық түрлерін көрсетуге шамасы келмейді, себебі қалай жасау керектігі белгісіз. Common Lisp-те, мысалы, принтер CLOS объектілерін басып шығара алмайды. Оның орнына бағдарламашы generic функцияның print object әдісін жаза алады, ол объект басып шығарылғанда шақырылады. Бұл Ruby-де қолданылатын әдіске ұқсас. Lisp кодының өзі Reader синтаксисінде жазылған, ол оқу синтаксисі деп аталады. Көптеген тілдер код пен деректерді өңдеу үшін бөлек және әртүрлі анализаторларды (parsers) пайдаланады, ал Lisp тек біреуін ғана қолданады. Lisp кодын қамтитын файл жадыға дерек құрылымы ретінде оқылып, басқа бағдарламамен түрлендіріліп, содан кейін орындалуы немесе жазылуы мүмкін, мысалы, read-eval-print циклында. Барлық оқырман/жазушылар циклдік, рекурсивті немесе ортақ құрылымдарды қолдамайды.
.NET Framework-тің нұсқасы
.NET Framework-те Microsoft әзірлеген бірнеше сериализаторлар бар. Сондай-ақ, үшінші тараптан жасалған көптеген сериализаторлар да бар. Мұнда оннан астам сериализаторлар талқыланып, тестіленді. және осы жерде.
ОКамл
OCaml стандартты кітапханасы Marshal модулі арқылы мәліметтерді сериалдауды қамтамасыз етеді. PHP ресурстарды (файл көрсеткіштері, сокеттер және т.б.) қоспағанда, кез келген дерек типін сериалдай алады. Кіріктірілген `unserialize` функциясы, мүлдем сенімсіз деректермен қолданылғанда көбінесе қауіпті болады. Объектілер үшін, екі "сиқырлы әдіс" бар – `sleep` және `wakeup` – оларды класс ішінде жүзеге асыруға болады. Олар `serialize` және `unserialize` функцияларынан шақырылады, сәйкесінше, объектіні тазалауға және оны қалпына келтіруге мүмкіндік береді. Мысалы, сериалдау кезінде дерекқорына қосылысты жабу және десериалдау кезінде оны қайта ашу қажет болуы мүмкін; осы функционалдық осы екі сиқырлы әдіс арқылы жүзеге асырылады. Олар сондай-ақ объектінің қандай қасиеттерді сериалдау керектігін таңдауға мүмкіндік береді. PHP 5.1 нұсқасынан бастап, объектілер үшін объектіге бағытталған сериалдау механизмі – `Serializable` интерфейсі қол жетімді.
Алдын ала сөз
Prolog-тың терминдік құрылымы, тілдің жалғыз дерек құрылымы болып табылады, және ол `write_term/3` кіріктірілген предикаты арқылы серияландырылып шығарылуы мүмкін, ал `read/1` және `read_term/2` кіріктірілген предикаттары арқылы серияландырылып енгізілуі мүмкін. Нәтижесіндегі ағын – сығылмаған мәтін (мақсатты ағын конфигурациясымен анықталатын кейбір кодтаумен), ал терминдегі кез келген бос айнымалылар орын сақтаушы айнымалы атауларымен көрсетіледі. `write_term/3` предикаты Prolog-қа арналған ISO ерекшелігінде (ISO/IEC 13211-1) 59-беттен бастап стандартталған. ("Термин жазу, § 7.10.5"). Сондықтан, бір жүзеге асыру арқылы серияландырылған термин, екіұштылық немесе күтпеген жағдайларсыз басқа бір жүзеге асыру арқылы серияландырылып оқылуы күтіледі. Іс жүзінде, жүзеге асыруға тән кеңейтімдер (мысалы, SWI Prolog сөздіктері) стандартты емес термин құрылымдарын қолдануы мүмкін, сондықтан шекті жағдайларда өзара әрекеттесу бұзылуы мүмкін. Мысал ретінде SWI Prolog, SICStus Prolog, GNU Prolog пайдаланушы нұсқаулықтарын қараңыз. Желі арқылы алынған серияландырылған терминдердің спецификацияға сәйкестігі және оны қалай тексеру (символдық ағыннан десериализациядан кейін) жүзеге асырушыға қалдырылған. Prolog-тың кіріктірілген Definite Clause грамматикасын сол кезеңде қолдануға болады.
Python-тың атауы
Негізгі жалпы сериалдастыру механизмі – Pickle стандартты кітапхана модулі, деректер базасы жүйелері терминін еске түсіре отырып, деректерді сериалдастыруды сипаттау үшін (десериалдау үшін – пісіруден шығару) қолданылады. Pickle объектіні қайта құру үшін қолданылған нұсқауларды жазатын қарапайым стекке негіделген виртуалды машинаны пайдаланады. Бұл нұсқаларға бейімделетін, бірақ қауіпсіз емес (қате немесе зыянды деректерге қарсы қорғалмайтын) сериалдау форматы. Бұрмаланған немесе қасақана жасалған деректер десериалдаушының кез келген модульдерді импорттауына және кез келген объектіні құруына себеп болуы мүмкін. Стандартты кітапхана стандартты деректер форматтарына сериалдау модульдерін де қамтиды: json (негізгі скалярлық және жиынтық түрлерді қолдаумен кіріктірілген және кодтау және декодтау құралдары арқылы кез келген түрлерді қолдай алады), plistlib (бинарлық және XML қасиеттер тізімі форматтарын қолдайтын), xdrlib (RFC 1014-те сипатталған Сыртқы деректер өкілдігі (XDR) стандартын қолдайтын). Соңында, объектінің repr дұрыс ортада бағалана алуы тиіс, бұл оны Common Lisp-тің басып шығару объектісімен шамамен сәйкес етеді. Барлық объектілерді автоматты түрде сериалдау мүмкін емес, әсіресе операциялық жүйе ресурстарын, мысалы, файл дескрипторларын сақтайтындарды, бірақ пайдаланушылар кез келген түрлерді сериалдау және десериалдауды қолдау үшін арнайы «қайта келтіру» және құрастыру функцияларын тіркеуге болады. Pickle бастапқыда таза Python pickle модулі ретінде жүзеге асырылған, бірақ Python 3.0-дан бұрынғы нұсқаларында cPickle модулі (сонымен қатар кіріктірілген) жақсартылған өнімділікті ұсынады (1000 есе жылдам).
R
R-де файлға немесе қосылымға R нысанының ASCII мәтіндік көрінісін жазатын dput функциясы бар. Көріністі dget функциясымен файлдан оқуға болады. Көбірек нақты айтқанда, serialize функциясы R нысанын қосылымға түрлендіреді, нәтижесі гексадецималды форматта кодталған шикі вектор болып табылады. unserialize функциясы қосылымнан немесе шикі вектордан нысанды оқуға мүмкіндік береді.
ҚҰРЫЛЫС
REBOL файлға (сақтау/барлық) немесе жолға серияландырылады! (қалыптау/барлық). Жолдар мен файлдарды полиморфты жүктеу функциясы арқылы кері серияландыруға болады. RProtoBuf протокол буферлерін пайдаланып, R тілінде әртүрлі тілдердегі деректерді серияландыруды қамтамасыз етеді.
Руби
Ruby стандартты Маршалл модулін 2 әдіспен қамтиды: `dump` және `load`, бұл стандартты Unix утилиталары `dump` және `restore` сияқты. Бұл әдістер стандартты `String` класына сериялайды, яғни олар тиімді түрде байттар тізбегіне айналады. Кейбір нысандарды сериялау мүмкін емес (мұндай әрекет `TypeError` қатесін тудырады): байланыстар, процедуралық нысандар, `IO` класының инстанциялары, жеке нысандар және интерфейстер. Егер классқа арнайы сериялау қажет болса (мысалы, құю/қалпына келтіру кезінде белгілі бір тазалау шараларын орындау қажет болса), оны 2 әдіс арқылы іске асыруға болады: `dump` және `load`. Инстанция әдісі `dump` осы кластың нысандарын және барлық сілтемеленген нысандарды белгілі бір тереңдікке дейін қайта құру үшін қажетті барлық ақпаратты қамтитын `String` нысанын қайтаруы керек (тереңдік бүтін сан параметрі ретінде беріледі, ал 1 мәні тереңдік тексеруді өшіруді білдіреді). Класс әдісі `load` `String` қабылдап, осы кластың нысанын қайтаруы керек.
Қатты тотығу
Serde – Rust тілінде деректерді сериалдастыру үшін ең көп қолданылатын кітапхана немесе пакет.
Кішкене әңгіме
Жалпы, рекурсивті емес және ортақтаспайтын нысандарды storeOn:/readFrom: протоколын қолдану арқылы адам оқи алатын форматта сақтауға және қайта алуға болады. storeOn: әдісі Smalltalk өрнегінің мәтінін жасайды, ол readFrom: арқылы есептелгенде бастапқы нысанды қайта жасайды. Бұл схема ерекше, себебі ол деректердің өзі емес, нысанның процедуралық сипаттамасын пайдаланады. Сондықтан ол өте икемді, сыныптарға ықшам өрнеулерді анықтауға мүмкіндік береді. Дегенмен, бастапқы түрінде ол циклдық дерек құрылымдарын өңдемейді немесе ортақ сілтемелердің идентификациясын сақтай алмайды (яғни, бір нысанға екі сілтеме болған жағдайда, олар екі бірдей, бірақ сәйкес емес көшірмелерге сілтеме ретінде қалпына келтіріледі). Осы үшін әртүрлі портативті және портативті емес баламалар бар. Олардың кейбіреулері нақты Smalltalk жүзеге асыруына немесе сынып кітапханасына тән. Squeak Smalltalk-та нысандарды сериалдау және сақтаудың бірнеше тәсілі бар. Ең оңай және жиі қолданылатыны – storeOn:/readFrom: және SmartRefStream сериалдағыштарына негізделген екілік сақтау форматтары. Сонымен қатар, жинақталған нысандарды ImageSegments арқылы сақтауға және алуға болады. Екеуі де «бинарлық нысанды сақтау аясы» деп аталатын, ықшам екілік формаға сериалдауды және одан алуды қолдайды. Екеуі де циклдық, рекурсивті және ортақ құрылымдарды, сыныптар мен метасыныптар туралы ақпаратты сақтау/алуды қолдайды және «ұшудағы» нысанды көшіру механизмдерін қамтиды (яғни, нысанның ескі нұсқасымен жазылған инстанстарды, нысанның өзгеше макетімен түрлендіру). API-лар ұқсас (storeBinary/readBinary), бірақ кодтау егжей-тегжейі әртүрлі, бұл екі форматты үйлесімсіз етеді. Алайда, Smalltalk/X коды ашық және тегін, оны басқа Smalltalk-тарға жүктеуге болады, бұл түрлі диалекттер арасында нысандармен алмасуға мүмкіндік береді. Нысанды сериалдау ANSI Smalltalk спецификациясының бөлігі емес. Осының салдарынан, нысанды сериалдау кодын Smalltalk жүзеге асыруына байланысты өзгертуге болады. Соның нәтижесінде алынған екілік деректер де әртүрлі болады. Мысалы, Squeak Smalltalk-та жасалған сериалданған нысанды Ambrai Smalltalk-та қалпына келтіру мүмкін емес. Осылайша, нысанды сериалдауға сүйенетін және бірнеше Smalltalk жүзеге асыруларымен жұмыс істейтін әртүрлі қосымшалар осы әртүрлі жүзеге асырулар арасында деректерді бөлісе алмайды. Бұл қосымшаларға MinneStore нысандық деректер базасы және кейбір RPC пакеттері кіреді. Бұл мәселенің шешімі – SIXX, ол бірнеше Smalltalk-тар үшін пакет болып табылады және сериалдау үшін XML негізделген форматты пайдаланады.
Тез
Swift стандартты кітапханасы Encodable және Decodable екі протоколын ұсынады (бірге Codable ретінде біріктірілген), олар сәйкес келетін типтердің мысалдары JSON, қасиеттер тізімі немесе басқа форматтарға түрлендіруге немесе түрлендіруден шығаруға мүмкіндік береді. Компилятор сақталған қасиеттері де Decodable немесе Encodable болып табылатын типтер үшін осы протоколдардың әдепкі нұсқаларын автоматты түрде жасай алады.
Windows PowerShell бағдарламасы
Windows PowerShell сериалдастыруды Export-CliXML командасы арқылы жүзеге асырады. Export-CliXML .NET нысандарын сериалдайды және нәтижедегі XML файлды сақтайды. Нысандарды қайта құру үшін экспортталған файлдағы XML-ден десериалданған нысанды жасайтын Import-CliXML командасын пайдаланыңыз. Десериалданған нысандар, көбінесе "қасиеттік жиынтықтар" деп аталады, бұл тірі нысандар емес; олар қасиеттері бар, бірақ әдістері жоқ көшірмелер. Екі өлшемді деректер құрылымдарын CSV форматында (де)сериалдауға Import-Csv және Export-Csv командаларын пайдалануға болады.