Serializacja i deserializacja w języku C# z przykładem

⚡ Inteligentne podsumowanie

Serializacja w C# konwertuje obiekt na strumień bajtów, dzięki czemu można go zapisać do pliku lub przesłać między aplikacjami; deserializacja odbudowuje obiekt. Tutaj nauczysz się serializować i deserializować obiekty na przykładach.

  • 🔄 Co to jest: Serializacja zapisuje obiekt C# do pliku, a deserializacja go odczytuje.
  • 🏷️ [Serializowalny]: Aby klasa mogła zostać zserializowana, musi mieć atrybut [Serializable].
  • 💾 Format binarny: BinaryFormatter z FileStream zapisuje obiekt w formie binarnej.
  • 🧩 Formaty: Język C# obsługuje również serializację XML i JSON w celu umożliwienia odczytu wyników.
  • 🤖 Pomoc AI: Narzędzia AI, takie jak GitHub Copilot, generują kod serializacyjny natychmiast.

Serializacja i deserializacja w C#

Serializacja i deserializacja w C#

Koncepcja serializacji i deserializacji jest stosowana zawsze, gdy dane dotyczące obiektów muszą zostać przesłane z jednej aplikacji do drugiej. Serializacja służy do eksportowania danych aplikacji do pliku. Aplikacja docelowa następnie używa deserializacji, aby np.tracdane z aplikacji do dalszego wykorzystania.

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: identyfikator i nazwę tutoriali.

Serializacji można użyć do bezpośredniego zapisania właściwości danych klasy Tutorial do pliku. Deserializacja służy do odczytania danych z pliku i ponownego skonstruowania obiektu Tutorial.

Typy serializacji w C#

Język C# obsługuje kilka formatów serializacji, a wybór zależy od miejsca, w którym dane będą wykorzystywane. Główne typy są wymienione poniżej.

  • Serializacja binarna Konwertuje obiekt do kompaktowego strumienia binarnego. Jest szybki, ale nieczytelny dla człowieka i jest powiązany z platformą .NET.
  • Serializacja XML używa klasy XmlSerializer do zapisu publicznych właściwości obiektu w czytelnym pliku XML.
  • Serializacja JSON używa System.Text.Json lub Newtonsoft.Json do generowania lekkiego formatu JSON, najpopularniejszego formatu dla internetowych interfejsów API.
  • Serializacja SOAP formatuje dane jako komunikaty SOAP dla starszych usług sieciowych.

Jak serializować obiekt w C#

Spójrzmy na przykład, jak możemy to osiągnąć.

W naszym przykładzie wykonamy poniższe kroki wysokiego poziomu w kodzie

  1. Utwórz klasę o nazwie Tutorial, która ma 2 właściwości, mianowicie ID i nazwę
  2. 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.
  3. Następnie użyjemy serializacji, aby serializować powyższy obiekt do pliku o nazwie Przykład.txt
  4. Na koniec użyjemy deserializacji do deserializacji obiektu z pliku i wyświetlenia wartości w konsoli.

Wpisz poniższy kod w pliku program.cs aplikacji konsolowej.

Krok 1) Dodaj klasę.

Pierwszym krokiem jest dodanie klasy, która będzie używana do serializacji

Serializacja obiektu w C#

Code Wyjaśnienie:-

  1. Klasa, która ma zostać serializowana, musi mieć atrybut [Serializable]. To jest słowo kluczowe w języku C#. To słowo kluczowe jest następnie dołączane do klasy Tutorial. Jeśli nie wspomnisz o tym atrybucie, podczas próby serializacji klasy pojawi się błąd.
  2. Następna jest definicja klasy, która będzie serializowana. Tutaj definiujemy klasę o nazwie „Tutorial” i udostępniamy 2 właściwości, jedna to „ID”, a druga to „Nazwa”.

Krok 2) Utwórz obiekt.

W tym kroku najpierw utworzymy obiekt klasy Tutorial i serializujemy go do pliku o nazwie Przykład.txt

Serializacja obiektu w C#

Code Wyjaśnienie:-

  1. Najpierw tworzymy obiekt klasy Tutorial. Następnie przypisujemy wartość „1” do identyfikatora i „.net” do właściwości name.
  2. Następnie używamy klasy formatter, która służy 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 plików służy do otwierania pliku Przykład.txt w celu zapisu. Słowa kluczowe FileMode.Create i FileMode.Write służą do wyraźnej wzmianki o tym, że plik powinien zostać otwarty w celu zapisu.
  3. Na koniec używamy metody Serialize do przesłania danych binarnych do pliku. Następnie zamykamy strumień, od momentu zapisu działanie jest gotowy.

Krok 3) Użyj deserializacji.

Na koniec, aby mieć pewność, że dane znajdują się w pliku, używamy deserializacji w celu deserializacji obiektu z pliku.

Serializacja obiektu w C#

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();
  }
 }
}

Code Wyjaśnienie:-

  1. Tworzymy obiekt „strumień”, aby otworzyć plik Przykład.txt w trybie tylko do odczytu.
  2. Następnie używamy klasy formatter, która służy do deserializacji obiektu, który jest przechowywany w pliku Przykład.txt. Zwrócony obiekt jest ustawiany na obiekt objnew.
  3. Na koniec wyświetlamy na konsoli właściwości obiektu „objnew” za pomocą właściwości „ID” i „name”.

Gdy powyższy kod jest ustawiony, a projekt jest uruchamiany przy użyciu visual Studio, otrzymasz poniższe dane wyjściowe.

Wynik:-

Serializacja obiektu w C#

Z powyższego wyniku widać, że wartości z pliku zostały poprawnie zdeserializowane i wyświetlone w konsoli.

Serializacja JSON w C#

JSON to najpopularniejszy format używany w nowoczesnych aplikacjach i interfejsach API internetowych. Wbudowany System.Text.Json przestrzeń nazw serializuje i deserializuje obiekty za pomocą jednego wywołania metody, jak pokazano poniżej.

using System;
using System.Text.Json;
namespace DemoApplication
{
  class Tutorial
  {
    public int ID { get; set; }
    public string Name { get; set; }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Tutorial obj = new Tutorial { ID = 1, Name = ".Net" };
      string json = JsonSerializer.Serialize(obj);
      Console.WriteLine(json);

      Tutorial objnew = (Tutorial)JsonSerializer.Deserialize(json, typeof(Tutorial));
      Console.WriteLine(objnew.Name);
      Console.ReadKey();
    }
  }
}

Wyjście:

{"ID":1,"Name":".Net"}
.Net

FAQ

Serializacja konwertuje obiekt C# na strumień bajtów (binarny, XML lub JSON), dzięki czemu można go zapisać do pliku lub wysłać do innej aplikacji. Deserializacja odbudowuje obiekt na podstawie tych danych.

Atrybut [Serializable] oznacza klasę, dzięki czemu jej obiekty mogą być serializowane. Bez niego serializacja binarna zgłasza wyjątek podczas próby zapisu obiektu do pliku.

C# obsługuje serializację binarną (kompaktową, tylko .NET), serializację XML za pośrednictwem XmlSerializer, serializację JSON za pośrednictwem System.Text.Json i serializację SOAP dla starszych usług sieciowych.

Serializacja zapisuje dane obiektu do pliku lub strumienia, natomiast deserializacja odczytuje te dane i rekonstruuje oryginalny obiekt w pamięci.

BinaryFormatter jest obecnie przestarzały i uważany za niebezpieczny, ponieważ może wykonywać szkodliwy kod podczas deserializacji. Microsoft zaleca System.Text.Json lub XmlSerializer dla nowych aplikacji.

Asystenci AI, tacy jak GitHub Copilot, automatycznie uzupełniają wywołania Serialize i Deserialize, dodają atrybut [Serializable] i generują kod serializacji JSON lub XML z krótkiego komentarza.

Tak. Narzędzia oparte na sztucznej inteligencji generują klasy modeli, wybierają między formatami JSON, XML i binarnymi oraz dodają obsługę błędów, dzięki czemu kod serializacji jest bezpieczny i kompletny.

Serializacja binarna używa System.Runtime.Serialization.Formatters.Binary, JSON używa System.Text.Json, a XML używa System.Xml.Serialization.

Podsumuj ten post następująco: