Serijalizacija i deserijalizacija u C# s primjerom

⚡ Pametni sažetak

Serijalizacija u C# pretvara objekt u tok bajtova tako da se može spremiti u datoteku ili poslati između aplikacija; deserijalizacija ponovno gradi objekt. Ovdje ćete naučiti serijalizirati i deserializirati objekte s primjerima.

  • 🔄 Što je to: Serijalizacija zapisuje C# objekt u datoteku, a deserijalizacija ga čita natrag.
  • 🏷️ [Serijalizacija]: Klasa treba atribut [Serializable] prije nego što se može serijalizirati.
  • 💾 Binarni format: BinaryFormatter s FileStream zapisuje objekt u binarnom obliku.
  • 🧩 formati: C# također podržava XML i JSON serijalizaciju za čitljiv izlaz.
  • 🤖 Pomoć umjetne inteligencije: AI alati poput GitHub Copilota trenutno generiraju kod za serijalizaciju.

C# Serijalizacija i deserijalizacija

Serijalizacija i deserijalizacija u C#

Koncept serijalizacije i deserijalizacije koristi se kad god se podaci koji se odnose na objekte moraju poslati iz jedne aplikacije u drugu. Serijalizacija se koristi za izvoz podataka aplikacije u datoteku. Odredišna aplikacija zatim koristi deserijalizaciju za...tracpodatke iz aplikacije za daljnju upotrebu.

Serijalizacija je koncept u kojem se C# objekti klase pišu ili serijaliziraju u datoteke. Recimo da ste imali C# klasu pod nazivom Tutorial. A klasa ima 2 svojstva ID i naziv vodiča.

Serijalizacija se može koristiti za izravno pisanje svojstava podataka klase Tutorial u datoteku. Deserijalizacija se koristi za čitanje podataka iz datoteke i ponovnu konstrukciju objekta Tutorial.

Vrste serijalizacije u C#

C# podržava nekoliko formata serijalizacije, a odabirete jedan na temelju toga gdje će se podaci koristiti. Glavne vrste navedene su u nastavku.

  • Binarna serijalizacija pretvara objekt u kompaktni binarni tok. Brz je, ali nije čitljiv ljudima i vezan je za .NET.
  • XML serijalizacija koristi klasu XmlSerializer za zapisivanje javnih svojstava objekta u čitljivu XML datoteku.
  • JSON serijalizacija koristi System.Text.Json ili Newtonsoft.Json za izradu laganog JSON-a, najčešćeg formata za web API-je.
  • SOAP serijalizacija formatira podatke kao SOAP poruke za starije web servise.

Kako serijalizirati objekt u C#

Pogledajmo primjer kako to možemo postići.

U našem primjeru izvršit ćemo donje korake visoke razine u kodu

  1. Napravite klasu pod nazivom Tutorial koja ima 2 svojstva, naime ID i naziv
  2. Zatim ćemo stvoriti objekt iz klase i dodijeliti vrijednost “1” svojstvu ID i vrijednost “.Net” svojstvu name.
  3. Zatim ćemo koristiti serijalizaciju za serijalizaciju gornjeg objekta u datoteku pod nazivom Example.txt
  4. Na kraju ćemo koristiti deserijalizaciju za deserijalizaciju objekta iz datoteke i prikaz vrijednosti u konzoli.

Unesite donji kod u datoteku program.cs konzolne aplikacije.

Korak 1) Dodajte razred.

Prvi korak je dodavanje klase koja će se koristiti za serijalizaciju

Serializiranje objekta u C#

Code Obrazloženje:-

  1. Klasa koju je potrebno serijalizirati mora imati atribut [Serializable]. Ovo je ključna riječ u C#. Ova se ključna riječ zatim pridružuje klasi Tutorial. Ako ne spomenete ovaj atribut, dobit ćete pogrešku kada pokušate serijalizirati klasu.
  2. Sljedeća je definicija klase koja će biti serijalizirana. Ovdje definiramo klasu pod nazivom "Tutorial" i pružamo 2 svojstva, jedno je "ID", a drugo je "Name".

Korak 2) Stvorite objekt.

U ovom koraku prvo ćemo stvoriti objekt klase Tutorial i serijalizirati ga u datoteku pod nazivom Example.txt

Serializiranje objekta u C#

Code Obrazloženje:-

  1. Prvo, kreiramo objekt klase Tutorial. Zatim dodjeljujemo vrijednost "1" ID-u i ".net" svojstvu name.
  2. Zatim koristimo klasu formatera koja se koristi za serijalizaciju ili pretvaranje objekta u binarni format. Podaci u datoteci u serijalizaciji se izvode u binarnom formatu. Zatim stvaramo objekt toka datoteke. Objekt toka datoteke koristi se za otvaranje datoteke Example.txt u svrhu pisanja. Ključne riječi FileMode.Create i FileMode.Write koriste se za izričito spominjanje da se datoteka treba otvoriti u svrhu pisanja.
  3. Na kraju, koristimo metodu Serialize za prijenos binarnih podataka u datoteku. Zatim zatvaramo tok od pisanja operacija je dovršen.

Korak 3) Koristite deserijalizaciju.

Konačno, kako bismo osigurali da su podaci prisutni u datoteci, koristimo deserijalizaciju za deserijalizaciju objekta iz datoteke.

Serializiranje objekta u 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 Obrazloženje:-

  1. Mi stvaramo objekt “potok” za otvaranje datoteke Example.txt u načinu rada samo za čitanje.
  2. Zatim koristimo klasu formattera koja se koristi za deserijalizaciju objekta, koji je pohranjen u datoteci Example.txt. Vraćeni objekt postavljen je na objekt objnew.
  3. Na kraju, prikazujemo svojstva objekta “objnew” na konzoli koristeći svojstva “ID” i “name”.

Kada je gornji kod postavljen i projekt se izvodi pomoću Visual Studio, dobit ćete donji izlaz.

Izlaz:-

Serializiranje objekta u C#

Iz gornjeg izlaza možete vidjeti da su vrijednosti iz datoteke ispravno deserijalizirane i prikazane u konzoli.

JSON serijalizacija u C#

JSON je najčešće korišteni format za moderne aplikacije i web API-je. Ugrađeni System.Text.Json imenski prostor serijalizira i deserializira objekte jednim pozivom metode, kao što je prikazano dolje.

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

Izlaz:

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

Pitanja i odgovori

Serijalizacija pretvara C# objekt u tok bajtova (binarni, XML ili JSON) tako da se može spremiti u datoteku ili poslati drugoj aplikaciji. Deserijalizacija ponovno gradi objekt iz tih podataka.

Atribut [Serializable] označava klasu tako da se njezini objekti mogu serijalizirati. Bez njega, binarna serijalizacija izbacuje iznimku kada pokušate zapisati objekt u datoteku.

C# podržava binarnu serijalizaciju (kompaktnu, samo za .NET), XML serijalizaciju putem XmlSerializera, JSON serijalizaciju putem System.Text.Json i SOAP serijalizaciju za starije web servise.

Serijalizacija zapisuje podatke objekta u datoteku ili stream, dok deserijalizacija čita te podatke natrag i rekonstruira izvorni objekt u memoriji.

BinaryFormatter je sada zastario i smatra se nesigurnim jer može izvršiti štetni kod tijekom deserijalizacije. Microsoft preporučuje System.Text.Json ili XmlSerializer za nove aplikacije.

AI asistenti poput GitHub Copilota automatski dovršavaju pozive serijalizacije i deserijalizacije, dodaju atribut [Serializable] i generiraju JSON ili XML kod za serijalizaciju iz kratkog komentara.

Da. Alati pokretani umjetnom inteligencijom generiraju klase modela, biraju između JSON, XML i binarnih formata te dodaju obradu pogrešaka kako bi vaš kod za serijalizaciju bio siguran i potpun.

Binarna serijalizacija koristi System.Runtime.Serialization.Formatters.Binary, JSON koristi System.Text.Json, a XML koristi System.Xml.Serialization.

Sažmite ovu objavu uz: