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: