Serialisierung und Deserialisierung in C# mit Beispiel

โšก Intelligente Zusammenfassung

Die Serialisierung in C# wandelt ein Objekt in einen Byte-Stream um, sodass es in einer Datei gespeichert oder zwischen Anwendungen รผbertragen werden kann; die Deserialisierung stellt das Objekt wieder her. Hier lernen Sie anhand von Beispielen, wie man Objekte serialisiert und deserialisiert.

  • ๐Ÿ”„ Was es ist: Die Serialisierung schreibt ein C#-Objekt in eine Datei, die Deserialisierung liest es wieder ein.
  • ๐Ÿท๏ธ [Serialisierbar]: Eine Klasse benรถtigt das Attribut [Serializable], bevor sie serialisiert werden kann.
  • ๐Ÿ’พ Binรคrformat: Der BinaryFormatter mit einem FileStream schreibt das Objekt in Binรคrform.
  • ๐Ÿงฉ Formate: C# unterstรผtzt auรŸerdem die Serialisierung von XML und JSON fรผr lesbare Ausgaben.
  • ๐Ÿค– KI-Hilfe: KI-Tools wie GitHub Copilot generieren Serialisierungscode sofort.

C# Serialisierung und Deserialisierung

Serialisierung und Deserialisierung in C#

Das Konzept der Serialisierung und Deserialisierung kommt immer dann zum Einsatz, wenn Daten, die sich auf Objekte beziehen, von einer Anwendung an eine andere รผbertragen werden mรผssen. Die Serialisierung dient dazu, Anwendungsdaten in eine Datei zu exportieren. Die Zielanwendung verwendet dann die Deserialisierung, um die Daten zu exportieren.tracDie Daten aus der Anwendung werden zur weiteren Verwendung gespeichert.

Serialisierung ist ein Konzept, bei dem C#-Klassenobjekte in Dateien geschrieben oder serialisiert werden. Nehmen wir an, Sie hรคtten eine C#-Klasse namens Tutorial. Und die Klasse hat zwei Eigenschaften: ID und Tutorials-Name.

Mithilfe der Serialisierung kรถnnen die Dateneigenschaften der Tutorial-Klasse direkt in eine Datei geschrieben werden. Mithilfe der Deserialisierung werden die Daten aus der Datei gelesen und das Tutorial-Objekt erneut erstellt.

Serialisierungstypen in C#

C# unterstรผtzt verschiedene Serialisierungsformate. Die Auswahl des Formats hรคngt davon ab, wofรผr die Daten verwendet werden. Die wichtigsten Formate sind unten aufgefรผhrt.

  • Binรคre Serialisierung Konvertiert ein Objekt in einen kompakten Binรคrstrom. Es ist schnell, aber nicht lesbar und an .NET gebunden.
  • XML-Serialisierung verwendet die XmlSerializer-Klasse, um die รถffentlichen Eigenschaften eines Objekts in eine lesbare XML-Datei zu schreiben.
  • JSON-Serialisierung verwendet System.Text.Json oder Newtonsoft.Json, um leichtgewichtiges JSON zu erzeugen, das gebrรคuchlichste Format fรผr Web-APIs.
  • SOAP-Serialisierung Formatiert Daten als SOAP-Nachrichten fรผr รคltere Webdienste.

So serialisieren Sie ein Objekt in C#

Schauen wir uns ein Beispiel an, wie wir dies erreichen kรถnnen.

In unserem Beispiel fรผhren wir die folgenden allgemeinen Schritte im Code aus

  1. Erstellen Sie eine Klasse namens Tutorial, die รผber zwei Eigenschaften verfรผgt, nรคmlich ID und Name
  2. AnschlieรŸend erstellen wir ein Objekt aus der Klasse und weisen der ID-Eigenschaft den Wert โ€ž1โ€œ und der Namenseigenschaft den Wert โ€ž.Netโ€œ zu.
  3. AnschlieรŸend verwenden wir die Serialisierung, um das obige Objekt in eine Datei namens โ€žExample.txtโ€œ zu serialisieren
  4. SchlieรŸlich werden wir die Deserialisierung verwenden, um das Objekt aus der Datei zu deserialisieren und die Werte in der Konsole anzuzeigen.

Geben Sie den folgenden Code in die Datei program.cs der Konsolenanwendung ein.

Schritt 1) Fรผgen Sie die Klasse hinzu.

Der erste Schritt besteht darin, die Klasse hinzuzufรผgen, die fรผr die Serialisierung verwendet wird

Serialisieren Sie ein Objekt in C#

Code Erlรคuterung:-

  1. Die Klasse, die serialisiert werden muss, muss รผber das Attribut [Serializable] verfรผgen. Dies ist ein Schlรผsselwort in C#. Dieses Schlรผsselwort wird dann an die Tutorial-Klasse angehรคngt. Wenn Sie dieses Attribut nicht erwรคhnen, erhalten Sie beim Versuch, die Klasse zu serialisieren, eine Fehlermeldung.
  2. Als nรคchstes folgt die Definition der Klasse, die serialisiert werden soll. Hier definieren wir eine Klasse namens โ€žTutorialโ€œ und stellen zwei Eigenschaften bereit, eine ist โ€žIDโ€œ und die andere ist โ€žNameโ€œ.

Schritt 2) Erstellen Sie das Objekt.

In diesem Schritt erstellen wir zunรคchst das Objekt der Tutorial-Klasse und serialisieren es in die Datei โ€žExample.txtโ€œ.

Serialisieren Sie ein Objekt in C#

Code Erlรคuterung:-

  1. Zuerst erstellen wir ein Objekt der Tutorial-Klasse. AnschlieรŸend weisen wir der ID den Wert โ€ž1โ€œ und der Namenseigenschaft โ€ž.netโ€œ zu.
  2. AnschlieรŸend verwenden wir die Formatierungsklasse, mit der das Objekt serialisiert oder in ein Binรคrformat konvertiert wird. Die Daten in der Datei bei der Serialisierung erfolgen im Binรคrformat. Als nรคchstes erstellen wir ein Dateistreamobjekt. Das Dateistream-Objekt wird verwendet, um die Datei โ€žExample.txtโ€œ zu Schreibzwecken zu รถffnen. Die Schlรผsselwรถrter FileMode.Create und FileMode.Write werden verwendet, um ausdrรผcklich darauf hinzuweisen, dass die Datei zum Schreiben geรถffnet werden soll.
  3. AbschlieรŸend verwenden wir die Methode Serialize, um die Binรคrdaten in die Datei zu รผbertragen. Wir schlieรŸen dann den Stream, seit dem Schreiben Betrieb ist komplett.

Schritt 3) Verwenden Sie Deserialisierung.

Um schlieรŸlich sicherzustellen, dass die Daten in der Datei vorhanden sind, deserialisieren wir das Objekt mithilfe der Deserialisierung aus der Datei.

Serialisieren Sie ein Objekt in 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 Erlรคuterung:-

  1. Wir erstellen das Objekt โ€žStromโ€ um die Datei Beispiel.txt im schreibgeschรผtzten Modus zu รถffnen.
  2. AnschlieรŸend verwenden wir die Formatierungsklasse, die zum Deserialisieren des Objekts verwendet wird, das in der Datei โ€žExample.txtโ€œ gespeichert ist. Das zurรผckgegebene Objekt wird auf das Objekt objnew gesetzt.
  3. AbschlieรŸend zeigen wir der Konsole die Eigenschaften des Objekts โ€žobjnewโ€œ mithilfe der Eigenschaften โ€žIDโ€œ und โ€žnameโ€œ an.

Wenn der obige Code festgelegt ist und das Projekt mit ausgefรผhrt wird Visual Studio, erhalten Sie die folgende Ausgabe.

Ausgabe:-

Serialisieren Sie ein Objekt in C#

Sie kรถnnen der obigen Ausgabe entnehmen, dass die Werte aus der Datei ordnungsgemรครŸ deserialisiert und in der Konsole angezeigt wurden.

JSON-Serialisierung in C#

JSON ist das am weitesten verbreitete Format fรผr moderne Anwendungen und Web-APIs. System.Text.Json Der Namespace serialisiert und deserialisiert Objekte mit einem einzigen Methodenaufruf, wie unten gezeigt.

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

Ausgang:

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

Hรคufig gestellte Fragen

Die Serialisierung wandelt ein C#-Objekt in einen Byte-Stream (binรคr, XML oder JSON) um, sodass es in einer Datei gespeichert oder an eine andere Anwendung gesendet werden kann. Die Deserialisierung stellt das Objekt aus diesen Daten wieder her.

Das Attribut [Serializable] kennzeichnet eine Klasse so, dass ihre Objekte serialisiert werden kรถnnen. Ohne dieses Attribut lรถst die binรคre Serialisierung eine Ausnahme aus, wenn versucht wird, das Objekt in eine Datei zu schreiben.

C# unterstรผtzt Binรคrserialisierung (kompakt, nur .NET), XML-Serialisierung รผber XmlSerializer, JSON-Serialisierung รผber System.Text.Json und SOAP-Serialisierung fรผr รคltere Webdienste.

Bei der Serialisierung werden die Daten eines Objekts in eine Datei oder einen Datenstrom geschrieben, wรคhrend bei der Deserialisierung diese Daten wieder gelesen und das ursprรผngliche Objekt im Speicher wiederhergestellt werden.

BinaryFormatter ist mittlerweile veraltet und gilt als unsicher, da er wรคhrend der Deserialisierung schรคdlichen Code ausfรผhren kann. Microsoft Fรผr neue Anwendungen wird System.Text.Json oder XmlSerializer empfohlen.

KI-Assistenten wie GitHub Copilot vervollstรคndigen Serialize- und Deserialize-Aufrufe automatisch, fรผgen das Attribut [Serializable] hinzu und generieren aus einem kurzen Kommentar JSON- oder XML-Serialisierungscode.

Ja. KI-gestรผtzte Tools generieren Modellklassen, wรคhlen zwischen JSON-, XML- und Binรคrformaten und fรผgen eine Fehlerbehandlung hinzu, sodass Ihr Serialisierungscode sicher und vollstรคndig ist.

Fรผr die binรคre Serialisierung wird System.Runtime.Serialization.Formatters.Binary verwendet, fรผr JSON System.Text.Json und fรผr XML System.Xml.Serialization.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: