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: