В информатиката, в контекста на съхранението на данни, сериализацията е процес на преобразуване на структури от данни или обекти до поток от байтове запазвайки състоянието на техните полета и свойства. Потокът може да бъде двоичен (binary) или текстов (XML). Когато байтовете биват прочетени отново, чрез процеса на десериализация, се създава идентично копие на оригиналния обект.Светлин Наков. „Програмиране за .NET Framework“ – том 2 За голям брой сложни обекти, като например тези, които използват препратки, този процес не е праволинеен. Сериализацията на обектно-ориентирани предмети не включва никои от неразривно свързаните с тях в миналото методи.
Този процес на сериализиране на обект се нарича също разпределяне на обект. Обратната операцията, извличане на структура на данните от поредица от байтове, е десериализация.
Приложения – За запазване на състоянието на сесията (т. нар. „session state“) в ASP.NET – За копиране на обекти в clipboard в Windows Forms – За предаване на обекти по стойност от един домейн на приложение (application domain) в друг – За дълбоко копиране на обекти (deep copy) – В технологията за отдалечено извикване .NET remoting – Метод на прехвърляне на данни чрез проводници (съобщения). – Метод за съхранение на данни (в бази данни, на твърди дискове). – Метод на дистанционното процедурно извикване, например както в SOAP. – Метод за разпространение на обекти, особено в компонентно базираното софтуерното инженерство като COM, CORBA и т.н. – Метод за откриване на промени във вариращи във времето данни. След като един обект бъде превърнат в поток от байтове, той може да бъде криптиран, компресиран или обработен по друг начин в съответствие с целта, която сме си поставили. Тези процеси са прозрачни, т.е. не зависят от сериализирания обект. Обектът се сериализира и ние обработваме потока от байтове, без да се интересуваме какви са структурата и съдържанието на обекта. Така сериализацията улеснява обработката на обекти понеже позволява да се запишат в поток.
Присъщо на всяка схема за сериализация е че, тъй като кодирането на данните по подразбиране е серийно, извличането на една част от сериализирана структура от данните, изисква целия обект да се прочете от начало докрай и реконструира. В много приложения тази линейност е полезна, тъй като тя дава възможност на прости I / O интерфейси да бъдат използвани, за да съхраняват и предават състоянието на даден обект. В други приложения, където основна цел е висока производителност, има смисъл да се изразходват повече ресурси за работа с по-сложни, нелинейни структури за съхранение.
Дори и на една и съща машина, примитивните обекти от референтен тип са твърде крехки за запис, тъй като обектите, към които те сочат могат да бъдат презаредени на друго място в паметта. За да се справи с този проблем, процесът на сериализация включва етап, наречен „unswizzling“, където директните референции се конвертират в референции по име или позиция. Процесът на десериализация, включва обратна стъпка – „swizzling“.
След като сериализацията и десериализацията могат да бъдат управлявани от общ код (например функцията за сериализация в Microsoft Foundation Classes), е възможно кода да изпълнява и двете едновременно и по този начин 1) да открива разлики между сериализираните обектите и техните предишни копия и 2) да предоставя вход за следващото такова откриване. Не е задължително да се прави предварително копие, защото разликите могат да бъдат открити в процеса на изпълнение. Техниката се нарича диференциално изпълнение. Тя е полезна при програмирането на потребителски интерфейси, чието съдържание е променливо във времето – графични обекти могат да бъдат създадени, премахнати, променяни или настроени да приемат входящи данни без да е необходимо да се пише отделен код за това.
Значение Сериализацията премахва непрозрачността на абстрактните типове данни чрез потенциално разкриване на подробности за лично ползване по изпълнението. Несъществени изпълнения, които сериализират всички членове на данните могат да нарушат капсулацията.
За да попречат на конкуренти да правят съвместими продукти, издателите на софтуер често пазят подробности за сериализацията на техните програми като търговска тайна. Някои умишлено завоалират или дори криптират сериализационните данни. И все пак, оперативната съвместимост изисква приложенията да могат взаимно да разбират сериализационният си формат. Ето защо, дистанционен метод извиква архитектури като COBRA за да определи тези формати в детайли.
Много учреждения, като архиви и библиотеки, опитват да подсигурят архивите си за в бъдеще, като ги съхраняват на относително четими за хората сериализационни формати.
Сериализационни формати В началото на осемдесетте години технологията Xerox Network Systems(XNS) се превръща в първия широко приет стандарт. Sun Microsystems издават External Data Representation (XDR) през 1987.
Към края на деветдесетте години, нов тласък осигурява алтернатива на стандартните методи за сериализация: HML е използван за създаване на четимо от човек, текст-базирано кодиране. Такова кодиране може да бъде полезно за постоянни обекти,
които могат да се четат и разбират от хора, или да комуникират с други системи, независимо от езика за програмиране. Недостатък е загубата на по-компактното, байт-поток-базирано кодиране, но по това време по-големите капацитети за съхранение и пренос на данни не за били толкова голям проблем, колкото в първитте дни изчислителната техника. Бинарния XML е бил предложен като компромис, който не е разпознаваем от обикновени текстови редактори, но е по-компактен в сравнение с обикновения XML. През новия век, XML често е използвано за асинхронен трансфер на структурирани данни между клиент и сървър в уеб приложения Ajax.
JSON е по-лека алтернатива на XML, който също често се използва за комуникация клиент-сървър в уеб приложения. JSON се основава на JavaScript синтаксис, но се поддържа и в други езици за програмиране.
Алтернатива е YAML. Той включва функции, които го правят по-мощен за сериализация, по-рабираем за хора и потенциално по-компактен. Тези функции включват категория за маркирани типове данни, поддръжка на не-йерархични структури от данни, възможност за структуриране на данни с назъбване, и множество форми на скаларно цитирани данни.
Друг четим за човека сериализационен формат е свойството на лист, използвано в NeXTSTEP, GNUstep и OS X Cocoa.
За голям обем научни масиви от данни, като например сателитни данни и океански модели, са разработени специфични двоични стандарти сериализация, като HDF, NetCDF и по-старата GRIB.
Поддържани програмни езици Няколко обектно-ориентирани езици за програмиране директно поддържат сериализация на обекти чрез „syntactic sugar“ или чрез предоставяне на стандартен интерфейс за това. Някои от тези езици за програмиране са Ruby, Smalltalk, Python, PHP, Objective-C, Java, и семейството на .NET езиците. Също така, съществуват библиотеки, които добавят поддръжка на сериализация към езици без вградена такава.
CFML
CFML позволява структури от данни да бъдат сериализирани към WDDX с <cfwddx> таг и към JSON с функцията SerializeJSON ().
OCaml
OCaml стандартната библиотека осигурява разпределяне чрез модула Marshal и „Percasives“ функции output_value и input_value. В OCaml е трудно да се разпредели функция или структура от данни, която съдържа функция (например обект, който съдържа метод), тъй като изпълнимия код във функциите не може да се предава между различни програми. (Има флаг, който разпределя кода от функция, но той може да се деразпредели само е единствено в същата програма). Стандартните разпределителни функции могат да подсигурят споделяне и да обработват циклични данни, които могат да бъдат конфигурирани чрез флаг.
Perl
Няколко Perl модула, достъпни от CPAN осигуряват механизми за сериализация, включително Storable, JSON: XS и FreezeThaw. Storable включва функции, които сериализират и десериализират Perl структури от данни към и от файлове или Perl скалари. В допълнение към сериализиране директно на файлове, Storable включва функцията freeze, която връща сериализирано копие от данните, съдържащи се в скалара и thaw – десериализиране на данните на този скалар. Това е полезно както за изпращането на сложна структура от данни през мрежови сокет, така и за да я добавите в базата данни. Когато се сериализират структури със Storable, може да се използват безопасни функции, които винаги съхраняват своите данни във формат, който се чете на всеки компютър за сметка на малка загуба на скорост. Тези функции са известни като nstore, nfreeze и т.н. Не съществуват никакви „n“ функции за десериализация на тези структури – редовните freeze и retrieve десериализират структури сериализирани с „n“ функции и техните машинно-специфични еквиваленти.
C and C++
C и C ++ не поддържат директно сериализация. Въпреки това е възможно да се напишат персонални функции за сериализация, тъй като и двата езика поддържат двоични данни. Освен това, компилаторно-базирани решения, като например системата ODB ORM за C ++, имат свойството автоматично да произвеждат сериализиран код с малко или дори без модификации на декларациите в класа. Други популярни сериализационни рамки са Boost.Serialization от Boost Framework, S11n framework, и Cereal. MFC Framework (Microsoft) също предоставя методология за сериализация като част от своята Document-View архитектура.
Java