Koncepcja serializacji i deserializacji jest używana zawsze, gdy dane dotyczące obiektów muszą być wysyłane z jednej aplikacji do drugiej. Serializacja służy do eksportowania danych aplikacji do pliku. Aplikacja docelowa używa następnie deserializacji w celu wyodrębnienia danych z aplikacji do dalszego użycia.
Serializacja to koncepcja, w której obiekty klasy C # są zapisywane lub serializowane do plików. Powiedzmy, że masz klasę C # o nazwie Tutorial. Klasa ma 2 właściwości: ID i Nazwa tutoriala.
Serializacja może służyć do bezpośredniego zapisywania właściwości danych klasy Tutorial do pliku. Deserializacja służy do odczytywania danych z pliku i ponownego tworzenia obiektu Tutorial.
Spójrzmy na przykład, jak możemy to osiągnąć.
W naszym przykładzie zamierzamy wykonać poniższe kroki wysokiego poziomu w kodzie
- Utwórz klasę o nazwie Tutorial, która ma 2 właściwości, a mianowicie ID i Name
- Następnie utworzymy obiekt z klasy i przypiszemy wartość „1” do właściwości ID i wartość „.Net” do właściwości name.
- Następnie użyjemy serializacji do serializacji powyższego obiektu do pliku o nazwie Example.txt
- Na koniec użyjemy deserializacji do deserializacji obiektu z pliku i wyświetlimy wartości w Console.
Wprowadź poniższy kod w pliku program.cs aplikacji konsoli.
Krok 1) Pierwszym krokiem jest dodanie klasy, która będzie używana do serializacji
Objaśnienie kodu: -
- Klasa, która ma zostać serializowana, musi mieć atrybut [Serializable]. To jest słowo kluczowe w C #. To słowo kluczowe jest następnie dołączane do klasy Tutorial. Jeśli nie wymienisz tego atrybutu, podczas próby serializacji klasy wystąpi błąd.
- Dalej jest definicja klasy, która zostanie serializowana. Tutaj definiujemy klasę o nazwie „Tutorial” i udostępniamy 2 właściwości, jedną jest „ID”, a drugą „Name”.
Krok 2) W tym kroku najpierw utworzymy obiekt klasy Tutorial i zserializujemy go do pliku o nazwie Example.txt
Objaśnienie kodu: -
- Najpierw tworzymy obiekt klasy Tutorial. Następnie przypisujemy wartość „1” do ID, a „.net” do właściwości name.
- Następnie używamy klasy programu formatującego, która jest używana do serializacji lub konwersji obiektu do formatu binarnego. Dane w pliku w serializacji są wykonywane w formacie binarnym. Następnie tworzymy obiekt strumienia plików. Obiekt strumienia pliku służy do otwierania pliku Example.txt do celów pisania. Słowa kluczowe FileMode.Create i FileMode.Write służą konkretnie do wskazania, że plik powinien zostać otwarty do celów pisania.
- Na koniec używamy metody Serialize, aby przesłać dane binarne do pliku. Następnie zamykamy strumień, ponieważ operacja zapisu została zakończona.
Krok 3) Wreszcie, aby upewnić się, że dane są obecne w pliku, używamy deserializacji do deserializacji obiektu z pliku.
using System;using System.IO;using System.Linq;using System.Runtime.Serialization;using System.Runtime.Serialization.Formatters.Binary;using System.Text;using System.Threading.Tasks;namespace DemoApplication{[Serializable]class Tutorial{public int ID;public String Name;static void Main(string[] args){Tutorial obj = new Tutorial();obj.ID = 1;obj.Name = ".Net";IFormatter formatter = new BinaryFormatter();Stream stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Create,FileAccess.Write);formatter.Serialize(stream, obj);stream.Close();stream = new FileStream(@"E:\ExampleNew.txt",FileMode.Open,FileAccess.Read);Tutorial objnew = (Tutorial)formatter.Deserialize(stream);Console.WriteLine(objnew.ID);Console.WriteLine(objnew.Name);Console.ReadKey();}}}
Objaśnienie kodu: -
- Tworzymy obiekt „stream”, aby otworzyć plik Example.txt w trybie tylko do odczytu.
- Następnie używamy klasy programu formatującego, która jest używana do deserializacji obiektu, który jest przechowywany w pliku Example.txt. Zwrócony obiekt jest ustawiany na obiekt objnew.
- Na koniec wyświetlamy właściwości obiektu „objnew” w konsoli za pomocą właściwości „ID” i „name”.
Gdy powyższy kod jest ustawiony, a projekt jest uruchamiany przy użyciu programu Visual Studio, otrzymasz poniższe dane wyjściowe.
Wynik:-
Z powyższego wyniku widać, że wartości z pliku zostały poprawnie zdeserializowane i wyświetlone w konsoli.
Podsumowanie
Serializacja służy do zapisywania obiektów klas w plikach.
De-serialization służy do odzyskiwania obiektów z pliku.