Serialisering och deserialisering i C# med exempel

โšก Smart sammanfattning

Serialisering i C# konverterar ett objekt till en strรถm av byte sรฅ att det kan sparas i en fil eller skickas mellan applikationer; avserialisering รฅterskapar objektet. Hรคr lรคr du dig att serialisera och avserialisera objekt med exempel.

  • ๐Ÿ”„ Vad det รคr: Serialisering skriver ett C#-objekt till en fil, och avserialisering lรคser tillbaka det.
  • ๐Ÿท๏ธ [Serialiserbar]: En klass behรถver attributet [Serializable] innan den kan serialiseras.
  • ๐Ÿ’พ Binรคrt format: BinaryFormatter med en FileStream skriver objektet i binรคr form.
  • ๐Ÿงฉ Format: C# stรถder รคven XML- och JSON-serialisering fรถr lรคsbar utdata.
  • ๐Ÿค– AI-hjรคlp: AI-verktyg som GitHub Copilot genererar serialiseringskod direkt.

C# serialisering och avserialisering

Serialisering och deserialisering i C#

Konceptet serialisering och avserialisering anvรคnds nรคr data som rรถr objekt mรฅste skickas frรฅn en applikation till en annan. Serialisering anvรคnds fรถr att exportera applikationsdata till en fil. Destinationsapplikationen anvรคnder sedan avserialisering fรถr att exporteratracdata frรฅn applikationen fรถr vidare anvรคndning.

Serialisering รคr ett koncept dรคr C#-klassobjekt skrivs eller serialiseras till filer. Lรฅt sรคga att du hade en C#-klass som heter Tutorial. Och klassen har 2 egenskaper med ID och Tutorials namn.

Serialisering kan anvรคndas fรถr att direkt skriva dataegenskaperna fรถr klassen Tutorial till en fil. Deserialisering anvรคnds fรถr att lรคsa data frรฅn filen och konstruera Tutorial-objektet igen.

Typer av serialisering i C#

C# stรถder flera serialiseringsformat, och du vรคljer ett baserat pรฅ var data ska anvรคndas. Huvudtyperna listas nedan.

  • Binรคr serialisering konverterar ett objekt till en kompakt binรคr strรถm. Den รคr snabb men inte lรคsbar av mรคnniskor och รคr kopplad till .NET.
  • XML-serialisering anvรคnder XmlSerializer-klassen fรถr att skriva ett objekts publika egenskaper till en lรคsbar XML-fil.
  • JSON-serialisering anvรคnder System.Text.Json eller Newtonsoft.Json fรถr att producera lรคttvikts-JSON, det vanligaste formatet fรถr webb-API:er.
  • SOAP-serialisering formaterar data som SOAP-meddelanden fรถr รคldre webbtjรคnster.

Hur man serialiserar ett objekt i C#

Lรฅt oss titta pรฅ ett exempel pรฅ hur vi kan uppnรฅ detta.

I vรฅrt exempel kommer vi att utfรถra stegen nedan pรฅ hรถg nivรฅ i koden

  1. Skapa en klass som heter Tutorial som har 2 egenskaper, nรคmligen ID och Namn
  2. Vi kommer sedan att skapa ett objekt frรฅn klassen och tilldela vรคrdet "1" till ID-egenskapen och vรคrdet ".Net" till namnegenskapen.
  3. Vi kommer sedan att anvรคnda serialisering fรถr att serialisera objektet ovan till en fil som heter Exempel.txt
  4. Slutligen kommer vi att anvรคnda deserialisering fรถr att deserialisera objektet frรฅn filen och visa vรคrdena i konsolen.

Ange koden nedan i filen program.cs i konsolapplikationen.

Steg 1) Lรคgg till klassen.

Det fรถrsta steget รคr att lรคgga till klassen som kommer att anvรคndas fรถr serialisering

Serialisera ett objekt i C#

Code Fรถrklaring:-

  1. Klassen som behรถver serialiseras mรฅste ha attributet [Serializable]. Detta รคr ett nyckelord i C#. Det hรคr nyckelordet kopplas sedan till handledningsklassen. Om du inte nรคmner detta attribut kommer du att fรฅ ett felmeddelande nรคr du fรถrsรถker serialisera klassen.
  2. Nรคsta รคr definitionen av klassen som kommer att serialiseras. Hรคr definierar vi en klass som heter "Tutorial" och tillhandahรฅller 2 egenskaper, en รคr "ID" och den andra รคr "Namn."

Steg 2) Skapa objektet.

I det hรคr steget kommer vi fรถrst att skapa objektet fรถr klassen Tutorial och serialisera det till filen Exempel.txt

Serialisera ett objekt i C#

Code Fรถrklaring:-

  1. Fรถrst skapar vi ett objekt av klassen Tutorial. Vi tilldelar sedan vรคrdet "1" till ID och ".net" till namnegenskapen.
  2. Vi anvรคnder sedan formateringsklassen som anvรคnds fรถr att serialisera eller konvertera objektet till ett binรคrt format. Data i filen i serialisering gรถrs i binรคrt format. Dรคrefter skapar vi ett filstrรถmsobjekt. Filstrรถmsobjektet anvรคnds fรถr att รถppna filen Exempel.txt fรถr skrivรคndamรฅl. Nyckelorden FileMode.Create och FileMode.Write anvรคnds fรถr att specifikt nรคmna att filen ska รถppnas fรถr skrivsyften.
  3. Slutligen anvรคnder vi Serialize-metoden fรถr att รถverfรถra binรคra data till filen. Vi stรคnger sedan strรถmmen, eftersom skrivningen drift รคr komplett.

Steg 3) Anvรคnd deserialisering.

Slutligen fรถr att sรคkerstรคlla att data finns i filen anvรคnder vi deserialisering fรถr att deserialisera objektet frรฅn filen.

Serialisera ett 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 Fรถrklaring:-

  1. Vi skapar objektet "strรถmโ€ fรถr att รถppna filen Exempel.txt i lรคsskyddat lรคge.
  2. Vi anvรคnder sedan formateringsklassen som anvรคnds fรถr att deserialisera objektet, som lagras i filen Example.txt. Objektet som returneras รคr satt till objektet objnew.
  3. Slutligen visar vi egenskaperna fรถr objektet "objnew" till konsolen med hjรคlp av egenskaperna "ID" och "name".

Nรคr ovanstรฅende kod รคr instรคlld och projektet kรถrs med Visual Studio, fรฅr du utdata nedan.

Produktion:-

Serialisera ett objekt i C#

Du kan se frรฅn ovanstรฅende utdata att vรคrdena frรฅn filen deserialiserades korrekt och visades i konsolen.

JSON-serialisering i C#

JSON รคr det mest anvรคnda formatet fรถr moderna applikationer och webb-API:er. Det inbyggda System.Text.Json namnrymden serialiserar och avserialiserar objekt med ett enda metodanrop, som visas nedan.

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

Produktion:

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

Vanliga frรฅgor

Serialisering konverterar ett C#-objekt till en strรถm av byte (binรคr, XML eller JSON) sรฅ att det kan sparas i en fil eller skickas till ett annat program. Avserialisering รฅterskapar objektet frรฅn dessa data.

Attributet [Serializable] markerar en klass sรฅ att dess objekt kan serialiseras. Utan det genererar binรคr serialisering ett undantag nรคr du fรถrsรถker skriva objektet till en fil.

C# stรถder binรคr serialisering (kompakt, endast .NET), XML-serialisering via XmlSerializer, JSON-serialisering via System.Text.Json och SOAP-serialisering fรถr รคldre webbtjรคnster.

Serialisering skriver ett objekts data till en fil eller strรถm, medan avserialisering lรคser tillbaka den informationen och rekonstruerar det ursprungliga objektet i minnet.

BinaryFormatter รคr nu fรถrรฅldrad och anses osรคker eftersom den kan exekvera skadlig kod under avserialisering. Microsoft rekommenderar System.Text.Json eller XmlSerializer fรถr nya applikationer.

AI-assistenter som GitHub Copilot autokompletterar anrop fรถr serialisering och avserialisering, lรคgger till attributet [Serializable] och genererar JSON- eller XML-serialiseringskod frรฅn en kort kommentar.

Ja. AI-drivna verktyg genererar modellklasser, vรคljer mellan JSON-, XML- och binรคra format och lรคgger till felhantering sรฅ att din serialiseringskod รคr sรคker och komplett.

Binรคr serialisering anvรคnder System.Runtime.Serialization.Formaters.Binary, JSON anvรคnder System.Text.Json och XML anvรคnder System.Xml.Serialization.

Sammanfatta detta inlรคgg med: