Serializace a deserializace v C# s příkladem

⚡ Chytré shrnutí

Serializace v C# převádí objekt do proudu bajtů, takže jej lze uložit do souboru nebo odeslat mezi aplikacemi; deserializace objekt znovu sestaví. Zde se naučíte serializovat a deserializovat objekty s příklady.

  • 🔄 Co to je: Serializace zapíše objekt C# do souboru a deserializace jej zpětně přečte.
  • ???? ️ [Serializovatelné]: Třída potřebuje atribut [Serializable], než ji lze serializovat.
  • 💾 Binární formát: BinaryFormatter s FileStream zapisuje objekt v binárním tvaru.
  • 🧩 Formáty: C# také podporuje serializaci XML a JSON pro čitelný výstup.
  • 🤖 Pomoc s umělou inteligencí: Nástroje umělé inteligence, jako je GitHub Copilot, generují serializační kód okamžitě.

Serializace a deserializace v C#

Serializace a deserializace v C#

Koncept serializace a deserializace se používá vždy, když je třeba odeslat data týkající se objektů z jedné aplikace do druhé. Serializace se používá k exportu dat aplikace do souboru. Cílová aplikace poté použije deserializaci k exportu...tracdata z aplikace pro další použití.

Serializace je koncept, ve kterém jsou objekty třídy C# zapisovány nebo serializovány do souborů. Řekněme, že jste měli třídu C# s názvem Tutorial. A třída má 2 vlastnosti ID a název Tutorials.

Serializaci lze použít k přímému zápisu vlastností dat třídy Tutorial do souboru. Deserializace se používá k načtení dat ze souboru a opětovné konstrukci objektu Tutorial.

Typy serializace v C#

Jazyk C# podporuje několik formátů serializace a ten si vyberete na základě toho, kde budou data použita. Hlavní typy jsou uvedeny níže.

  • Binární serializace převádí objekt do kompaktního binárního proudu. Je rychlý, ale nečitelný pro člověka a je vázán na .NET.
  • Serializace XML používá třídu XmlSerializer k zápisu veřejných vlastností objektu do čitelného souboru XML.
  • Serializace JSON používá System.Text.Json nebo Newtonsoft.Json k vytvoření lehkého JSON, nejběžnějšího formátu pro webová API.
  • Serializace SOAPu formátuje data jako zprávy SOAP pro starší webové služby.

Jak serializovat objekt v C#

Podívejme se na příklad, jak toho můžeme dosáhnout.

V našem příkladu provedeme v kódu níže uvedené kroky na vysoké úrovni

  1. Vytvořte třídu s názvem Tutorial, která má 2 vlastnosti, jmenovitě ID a Název
  2. Poté vytvoříme objekt z třídy a přiřadíme hodnotu „1“ vlastnosti ID a hodnotu „.Net“ vlastnosti name.
  3. Potom použijeme serializaci k serializaci výše uvedeného objektu do souboru s názvem Example.txt
  4. Nakonec použijeme deserializaci k deserializaci objektu ze souboru a zobrazení hodnot v konzole.

Zadejte níže uvedený kód do souboru program.cs konzolové aplikace.

Krok 1) Přidejte třídu.

Prvním krokem je přidání třídy, která bude použita pro serializaci

Serializovat objekt v C#

Code Vysvětlení:-

  1. Třída, kterou je třeba serializovat, musí mít atribut [Serializable]. Toto je klíčové slovo v C#. Toto klíčové slovo je pak připojeno ke třídě Tutorial. Pokud tento atribut nezmíníte, při pokusu o serializaci třídy se zobrazí chyba.
  2. Dále je definována třída, která bude serializována. Zde definujeme třídu s názvem „Výukový program“ a poskytujeme 2 vlastnosti, jedna je „ID“ a druhá je „Název“.

Krok 2) Vytvořte objekt.

V tomto kroku nejprve vytvoříme objekt třídy Tutorial a serializujeme jej do souboru s názvem Example.txt

Serializovat objekt v C#

Code Vysvětlení:-

  1. Nejprve vytvoříme objekt třídy Tutorial. Poté přiřadíme hodnotu „1“ ID a „.net“ vlastnosti name.
  2. Poté použijeme třídu formátovače, která se používá k serializaci nebo převodu objektu do binárního formátu. Data v souboru v serializaci jsou provedena v binárním formátu. Dále vytvoříme objekt souborového proudu. Objekt file stream se používá k otevření souboru Example.txt pro účely zápisu. Klíčová slova FileMode.Create a FileMode.Write se používají ke konkrétní zmínce, že soubor by měl být otevřen pro účely zápisu.
  3. Nakonec použijeme metodu Serialize k přenosu binárních dat do souboru. Poté stream zavřeme od zápisu operace je kompletní.

Krok 3) Použijte deserializaci.

Nakonec, abychom zajistili, že data jsou v souboru přítomna, použijeme deserializaci k deserializaci objektu ze souboru.

Serializovat objekt v 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 Vysvětlení:-

  1. Vytváříme objekt "proud” pro otevření souboru Example.txt v režimu pouze pro čtení.
  2. Poté použijeme třídu formatter, která se používá k deserializaci objektu, který je uložen v souboru Example.txt. Vrácený objekt je nastaven na objekt objnew.
  3. Nakonec zobrazíme vlastnosti objektu „objnew“ konzoli pomocí vlastností „ID“ a „name“.

Když je nastaven výše uvedený kód a projekt je spuštěn pomocí Visual Studio, získáte níže uvedený výstup.

Výstup:-

Serializovat objekt v C#

Z výše uvedeného výstupu můžete vidět, že hodnoty ze souboru byly správně deserializovány a zobrazeny v konzole.

Serializace JSON v C#

JSON je nejrozšířenější formát pro moderní aplikace a webová API. Vestavěný System.Text.Json namespace serializuje a deserializuje objekty jediným voláním metody, jak je znázorněno níže.

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

Výstup:

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

Nejčastější dotazy

Serializace převádí objekt C# na proud bajtů (binární, XML nebo JSON), aby jej bylo možné uložit do souboru nebo odeslat do jiné aplikace. Deserializace znovu vytvoří objekt z těchto dat.

Atribut [Serializable] označuje třídu, aby její objekty mohly být serializovány. Bez něj binární serializace vyvolá výjimku při pokusu o zápis objektu do souboru.

C# podporuje binární serializaci (kompaktní, pouze .NET), serializaci XML přes XmlSerializer, serializaci JSON přes System.Text.Json a serializaci SOAP pro starší webové služby.

Serializace zapisuje data objektu do souboru nebo streamu, zatímco deserializace tato data zpětně přečte a rekonstruuje původní objekt v paměti.

BinaryFormatter je nyní zastaralý a považován za nezabezpečený, protože může během deserializace spustit škodlivý kód. Microsoft Pro nové aplikace doporučuje System.Text.Json nebo XmlSerializer.

Asistenti umělé inteligence, jako je GitHub Copilot, automaticky dokončují volání serializace a deserializace, přidávají atribut [Serializable] a generují serializační kód JSON nebo XML z krátkého komentáře.

Ano. Nástroje s umělou inteligencí generují třídy modelů, vybírají mezi formáty JSON, XML a binárními a přidávají ošetření chyb, takže váš serializační kód je bezpečný a úplný.

Binární serializace používá System.Runtime.Serialization.Formatters.Binary, JSON používá System.Text.Json a XML používá System.Xml.Serialization.

Shrňte tento příspěvek takto: