Serialisering og deserialisering i C# med eksempel

⚡ Smart oppsummering

Serialisering i C# konverterer et objekt til en strøm av byte slik at det kan lagres i en fil eller sendes mellom applikasjoner; deserialisering gjenoppbygger objektet. Her lærer du å serialisere og deserialisere objekter med eksempler.

  • 🔄 Hva det er: Serialisering skriver et C#-objekt til en fil, og deserialisering leser det tilbake.
  • 🏷️ [Serialiserbar]: En klasse trenger attributtet [Serializable] før den kan serialiseres.
  • 💾 Binært format: BinaryFormatter med en FileStream skriver objektet i binær form.
  • 🧩 Formater: C# støtter også XML- og JSON-serialisering for lesbar utdata.
  • 🤖 AI-hjelp: AI-verktøy som GitHub Copilot genererer serialiseringskode umiddelbart.

C# serialisering og deserialisering

Serialisering og deserialisering i C#

Konseptet serialisering og deserialisering brukes når data knyttet til objekter må sendes fra ett program til et annet. Serialisering brukes til å eksportere programdata til en fil. Destinasjonsprogrammet bruker deretter deserialisering til å eksporteretracdataene fra applikasjonen for videre bruk.

Serialisering er et konsept der C#-klasseobjekter skrives eller serialiseres til filer. La oss si at du hadde en C#-klasse kalt Tutorial. Og klassen har 2 egenskaper med ID og opplæringsnavn.

Serialisering kan brukes til å skrive dataegenskapene til opplæringsklassen direkte til en fil. Deserialisering brukes til å lese dataene fra filen og konstruere Tutorial-objektet på nytt.

Typer serialisering i C#

C# støtter flere serialiseringsformater, og du velger ett basert på hvor dataene skal brukes. Hovedtypene er listet opp nedenfor.

  • Binær serialisering konverterer et objekt til en kompakt binærstrøm. Den er rask, men ikke lesbar for mennesker, og er knyttet til .NET.
  • XML-serialisering bruker XmlSerializer-klassen til å skrive et objekts offentlige egenskaper til en lesbar XML-fil.
  • JSON-serialisering bruker System.Text.Json eller Newtonsoft.Json til å produsere lett JSON, det vanligste formatet for web-API-er.
  • SOAP-serialisering formaterer data som SOAP-meldinger for eldre webtjenester.

Hvordan serialisere et objekt i C#

La oss se på et eksempel på hvordan vi kan oppnå dette.

I vårt eksempel skal vi utføre trinnene på høyt nivå nedenfor i koden

  1. Lag en klasse kalt Tutorial som har 2 egenskaper, nemlig ID og Navn
  2. Vi vil da lage et objekt fra klassen og tilordne verdien "1" til ID-egenskapen og verdien ".Net" til navneegenskapen.
  3. Vi vil da bruke serialisering for å serialisere objektet ovenfor til en fil kalt Eksempel.txt
  4. Til slutt vil vi bruke deserialisering for å deserialisere objektet fra filen og vise verdiene i konsollen.

Skriv inn koden nedenfor i program.cs-filen til konsollapplikasjonen.

Trinn 1) Legg til klassen.

Det første trinnet er å legge til klassen som skal brukes til serialisering

Serialiser et objekt i C#

Code Forklaring:-

  1. Klassen som må serialiseres må ha [Serializable]-attributtet. Dette er et nøkkelord i C#. Dette nøkkelordet blir deretter knyttet til opplæringsklassen. Hvis du ikke nevner dette attributtet, vil du få en feilmelding når du prøver å serialisere klassen.
  2. Neste er definisjonen av klassen som skal serialiseres. Her definerer vi en klasse kalt "Tutorial" og gir 2 egenskaper, den ene er "ID" og den andre er "Navn."

Trinn 2) Lag objektet.

I dette trinnet vil vi først lage objektet til Tutorial-klassen og serialisere det til filen som heter Eksempel.txt

Serialiser et objekt i C#

Code Forklaring:-

  1. Først lager vi et objekt av opplæringsklassen. Vi tildeler deretter verdien "1" til ID og ".net" til navneegenskapen.
  2. Vi bruker da formateringsklassen som brukes til å serialisere eller konvertere objektet til et binært format. Dataene i filen i serialisering gjøres i binært format. Deretter lager vi et filstrømobjekt. Filstrømobjektet brukes til å åpne filen Eksempel.txt for skriveformål. Nøkkelordene FileMode.Create og FileMode.Write brukes for å spesifikt nevne at filen skal åpnes for skriveformål.
  3. Til slutt bruker vi Serialize-metoden for å overføre de binære dataene til filen. Vi stenger deretter strømmen, siden skrivingen drift er ferdig.

Trinn 3) Bruk deserialisering.

Til slutt for å sikre at dataene er tilstede i filen, bruker vi deserialisering for å deserialisere objektet fra filen.

Serialiser et objekt i 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 Forklaring:-

  1. Vi lager objektet "stream” for å åpne filen Eksempel.txt i skrivebeskyttet modus.
  2. Vi bruker da formateringsklassen som brukes til å deserialisere objektet, som er lagret i filen Eksempel.txt. Objektet som returneres er satt til objektet objnew.
  3. Til slutt viser vi egenskapene til objektet "objnew" til konsollen ved å bruke egenskapene "ID" og "name".

Når koden ovenfor er satt, og prosjektet kjøres med Visual Studio, vil du få utgangen nedenfor.

Produksjon:-

Serialiser et objekt i C#

Du kan se fra utgangen ovenfor at verdiene fra filen ble deserialisert riktig og vist i konsollen.

JSON-serialisering i C#

JSON er det mest brukte formatet for moderne applikasjoner og web-API-er. Det innebygde System.Text.Json Navnerommet serialiserer og deserialiserer objekter med et enkelt metodekall, som vist nedenfor.

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

Utgang:

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

Spørsmål og svar

Serialisering konverterer et C#-objekt til en strøm av byte (binær, XML eller JSON) slik at det kan lagres i en fil eller sendes til et annet program. Deserialisering gjenoppbygger objektet fra disse dataene.

Attributtet [Serializable] markerer en klasse slik at objektene kan serialiseres. Uten dette vil binær serialisering generere et unntak når du prøver å skrive objektet til en fil.

C# støtter binær serialisering (kompakt, kun .NET), XML-serialisering via XmlSerializer, JSON-serialisering via System.Text.Json og SOAP-serialisering for eldre webtjenester.

Serialisering skriver et objekts data til en fil eller strøm, mens deserialisering leser disse dataene tilbake og rekonstruerer det opprinnelige objektet i minnet.

BinaryFormatter er nå utdatert og ansett som usikkert fordi det kan kjøre skadelig kode under deserialisering. Microsoft anbefaler System.Text.Json eller XmlSerializer for nye applikasjoner.

AI-assistenter som GitHub Copilot fullfører automatisk serialiserings- og deserialiseringskall, legger til attributtet [Serializable] og genererer JSON- eller XML-serialiseringskode fra en kort kommentar.

Ja. AI-drevne verktøy genererer modellklasser, velger mellom JSON-, XML- og binære formater, og legger til feilhåndtering slik at serialiseringskoden din er trygg og fullstendig.

Binær serialisering bruker System.Runtime.Serialization.Formaters.Binary, JSON bruker System.Text.Json, og XML bruker System.Xml.Serialization.

Oppsummer dette innlegget med: