Serializacja Xmlowa w .NET
Artykuł przedstawia sposób wykorzystania serializacji XMLowej dostępnej na platformie .NET oraz narzędzie xsd.exe, które może wspomagać programistę podczas pracy z tego rodzaju serializacją.
Platforma .NET udostępnia dwa podstawowe rodzaje serializacji - serializację binarną oraz serializację XMLową. Zasadniczą różnicą pomiedzy tymi dwoma rodzajami serializacji jest to, że serializacja binarna tworzy dokładną reprezentację obiektu, podczas gdy serializacja XMLowa serializuje tylko niektóre jego publiczne zmienne oraz właściwości. Ponadto podczas serializacji binarnej serializowana jest również informacja o typach, co nie występuje w przypadku serializacji XMLowej. Konsekwencją tego ograniczenia może być sytuacja, w której po deserializacji XMLowej otrzyma sie obiekt innego typu niż ten, ktory był serializowany. Jak widać serializacja binarna bardzo dobrze nadaje, się do zapisywania stanu systemu lub przetwarzania rozproszonego (jest zresztą intensywnie wykorzystywana przez Remoting) podczas gdy serializacja XMLowa, może być bardzo przydatna podczas współpracy z systemami komunikującymi się przy użyciu języka XML.
Serializacja XMLowa polega na konwersji publicznych zmiennych oraz właściwości obiektu do strumienia XMLowego. Deserializacja jest procesem odwrotnym. Podstawową klasą wspierającą serializację XMLową na platformie .NET jest XmlSerializer. Powyższe podstawowe informacje są wystarczające do napisania pomocniczej klasy, która będzie używana do serializacji łańcucha tekstowego zawierającego poprawny dokument XML do obiektu oraz i vice versa. Kod tej klasy znajduje się na listingu 1. Nie jest on zbytnio skomplikowany, a w razie potrzeby można z łatwością dostosować go do swoich potrzeb. Aby umożliwić jego ponowne użycie, zostanie stworzone osobne assembly zawierające tę klasę. Będzie ono następnie dołączane do kolejnych przykładów prezentowanych w artykule. Aby zbudować bilbliotekę należy wykonać polecenie:
csc /t:library Serializator.cs
Dysponując gotową klasą pomocniczą można przystąpić do pierwszej próby serializacji. We wszystkich przykładach przedstawionych w artykule przedmiotem serializacji/deserializacji będzie obiekt lub dokument XML reprezentujący uproszczoną fakturę. Głównymi składnikami takiej faktury będą :
- numer faktury
- data wystawienia
- adres sprzedawcy
- adres nabywcy
- lista towarów lub usług
Hierarchia klas została przedstawiona na rysunku 1 natomiast przykładowy dokument XML reprezentujący fakturę (czyli wynik serializacji lub źródło deserializacji) został przedstawiony na listingu 2.
Na podstawie przedstawionego wcześniej diagramu klas został stworzony kod znajdujący się na listingu 3. Klasy wykorzystywane do serializacji zostaną, podobnie jak zbudowany na początku artykułu Serializator umieszczone w oddzielnej bibliotece.
Ostatnią rzeczą jaka została do zrobienia aby wreszcie uruchomić przykład jest stworzenie klienta. Jego kod kodu znajduje się na listingu 4. Po pomyślnej kompilacji poleceniem:
csc /r:Faktura.dll,Serializator.dll /out:Klient1.exe Klient.cs
otrzyamamy gotowy do uruchomienia program klienta.(Na dołączonej do numeru płycie znajduje się plik wsadowy o nazwie Przyklad1.bat, który wykonuje całą kompilację samodzielnie i uruchamia program klieta).

