Wyjaśnij serializację i deserializację w C#

Wyjaśnij serializację i deserializację w C#
Serializacja odnosi się do aktu przekształcenia obiektu w format, który można przesyłać lub przechowywać, podczas gdy deserializacja jest procesem przekształcania serializowanych danych z powrotem do jego początkowej formy.

Ten artykuł wyjaśni Serializacja I deserializacja w C# z przykładem.

Serializacja w C#

Aby przekonwertować obiekt na format, który może być przechowywany lub przesyłany przez serializację sieciową, a ten format może być formatem XML, formatem binarnym lub dowolnym innym formatem. Serializacja jest używany do przechowywania i transmisji danych i jest to ważna koncepcja w programowaniu C#.

Weźmy przykład, aby zrozumieć serializację w C#, załóżmy, że mamy "Pracownik" klasa zawierająca imię i nazwisko pracownika, id i pensja:

za pomocą systemu;
za pomocą systemu.Io;
za pomocą systemu.Czas wykonawczy.Serializacja;
za pomocą systemu.Czas wykonawczy.Serializacja.JSON;
[DataContract]
Pracownik klasy publicznej

[DataMember]
public String Nazwa get; ustawić;
[DataMember]
public int id get; ustawić;
[DataMember]
public podwójne pensję get; ustawić;

Program klasowy

Statyczne pustka główna (String [] args)

Pracownik emp = nowy pracownik name = "Mark", id = 005, wynagrodzenie = 10000;
DataContractSerializer serializer = nowy DataContractSerializer (typeOF (pracownik));
używając (pamięć stream = new MemoryStream ())

Serializator.WriteObject (Stream, EMP);
bajt [] serializedData = strumień.Toarray ();
Konsola.WriteLine („Serializowane dane:”);
Konsola.WriteLine (BitConverter.ToString (SerializedData).Zastępować("-", ""));
// Zapisz serializowane dane do pliku za pomocą FileStream
String filename = "serializowane data.kosz";
String filepath = ścieżka.Połącz (środowisko.CurrentDirectory, nazwa pliku);
używając (fileSreamFileStream = nowy FileStream (FilePath, Filemode.Tworzyć))

FileStream.Write (SerializedData, 0, serializedData.Długość);

Konsola.WriteLine ($ „Serializowane dane zapisane w pliku: filePath”);


Powyższy kod C# pokazuje, jak serializować obiekt niestandardowej klasy wymienionej "Pracownik" używając DataContractSerializer klasa z System.Czas wykonawczy.Serializacja Przestrzeń nazw. Klasa ma trzy właściwości: nazwa, id i pensja, z których wszystkie są oznaczone DataMember atrybut wskazujący, że powinny być one uwzględnione w procesie serializacji.

W Main, instancja Pracownik Klasa jest tworzona, a jej właściwości są ustawione na przykładowe dane i DataContractSerializer jest następnie używany do serializacji obiektu w tablicę bajtów, który jest zapisywany w pliku za pomocą pliku FileStream. Ścieżka pliku jest określona za pomocą Ścieżka.Łączyć I Środowisko.CurrentDirectory () Funkcje, a następnie serializowane dane są wyświetlane w konsoli wraz ze ścieżką pliku:

Deserializacja w C#

Deserializacja jest procesem konwersji serializowanych danych, zwykle przechowywanych w pliku lub przesyłanym przez sieć, z powrotem do oryginalnej formy. W C#proces deserializacja polega na tworzeniu obiektu z jego serializowanej formy, którą można osiągnąć za pomocą różnych wbudowanych klas, takich jak DataContractSerializer albo Xmlserializer.

Weźmy przykład, aby zrozumieć deserializację w C# i użyj tego samego serializowanego pliku, który utworzyliśmy wcześniej i deserializuj go, poniżej znajduje się kod dla niego:

za pomocą systemu;
za pomocą systemu.Io;
za pomocą systemu.Czas wykonawczy.Serializacja;
za pomocą systemu.Czas wykonawczy.Serializacja.JSON;
[DataContract]
Pracownik klasy publicznej

[DataMember]
public String Nazwa get; ustawić;
[DataMember]
public int id get; ustawić;
[DataMember]
public podwójne pensję get; ustawić;

Program klasowy

Statyczne pustka główna (String [] args)

DataContractSerializer serializer = nowy DataContractSerializer (typeOF (pracownik));
// odczytaj serializowane dane z pliku za pomocą FileStream
String filename = "serializowane data.kosz";
String filepath = ścieżka.Połącz (środowisko.CurrentDirectory, nazwa pliku);
używając (fileSreamReadStream = new FileStream (FilePath, Filemode.Otwarty))

Pracownik deserializedEMP = (pracownik) Serializer.ReadObject (ReadStream);
Konsola.WriteLine ($ "Deserialized Pracoście.Nazwa, id - deserializedEMP.Id, wynagrodzenie - deserializeMedEMP.Wynagrodzenie");


Powyższy kod C# używa DataContractSerializer klasa, aby deserializować obiekt „pracownika”, który został wcześniej serializowany i zapisany w pliku binarnym. Klasa pracowników jest zdefiniowana DataMember atrybuty jego właściwości, aby wskazać, że powinny być serializowane/deserializowane. Główna tworzy instancję serializatora i otwiera plik binarny za pomocą FileStream, a funkcja Serializer ReadObject () jest następnie używana do odczytu danych serializowanych i utworzenia nowego obiektu pracownika. Obiekt pracownika jest następnie drukowany na konsolę, aby potwierdzić, że został pomyślnie deserializowany.

Końcowe przemyślenia

W programowaniu C#, Serializacja I deserializacja to istotne pojęcia używane do przechowywania danych i transmisji danych. Serializacja polega na przekształceniu obiektu w format odpowiedni do przechowywania lub transmisji, podczas gdy deserializacja obejmuje odwrotny proces konwersji serializowanych danych z powrotem do jego pierwotnej formy. W podanym przykładzie kodu, DataContractSerializer Klasa służy do serializacji wystąpienia klasy pracowników w tablicy bajtowej, która jest następnie zapisywana na pliku. deserializacja Proces polega na odczytaniu serializowanych danych z pliku i korzystanie z tego samego serializatora w celu z powrotem do instancji klasy pracowników.