Serialization και Deserialization σε C# με Παράδειγμα

⚡ Έξυπνη Σύνοψη

Η σειριοποίηση σε C# μετατρέπει ένα αντικείμενο σε μια ροή bytes, ώστε να μπορεί να αποθηκευτεί σε ένα αρχείο ή να αποσταλεί μεταξύ εφαρμογών. Η αποσειριοποίηση αναδομεί το αντικείμενο. Εδώ θα μάθετε να σειριοποιείτε και να αποσειριοποιείτε αντικείμενα με παραδείγματα.

  • 🔄 Αυτό που είναι: Η σειριοποίηση γράφει ένα αντικείμενο C# σε ένα αρχείο και η αποσειριοποίηση το διαβάζει πίσω.
  • 🏷️ [Σειριοποιήσιμο]: Μια κλάση χρειάζεται το χαρακτηριστικό [Serializable] πριν να μπορέσει να σειριοποιηθεί.
  • 💾 Δυαδική μορφή: Το BinaryFormatter με ένα FileStream γράφει το αντικείμενο σε δυαδική μορφή.
  • 🧩 Μορφές: Η C# υποστηρίζει επίσης σειριοποίηση XML και JSON για αναγνώσιμη έξοδο.
  • 🤖 Βοήθεια με την Τεχνητή Νοημοσύνη: Τα εργαλεία τεχνητής νοημοσύνης όπως το GitHub Copilot δημιουργούν άμεσα κώδικα σειριοποίησης.

Σειριοποίηση και Αποσειριοποίηση C#

Serialization & Deserialization σε C#

Η έννοια της σειριοποίησης και της αποσειριοποίησης χρησιμοποιείται κάθε φορά που δεδομένα που αφορούν αντικείμενα πρέπει να αποσταλούν από τη μία εφαρμογή στην άλλη. Η σειριοποίηση χρησιμοποιείται για την εξαγωγή δεδομένων εφαρμογής σε ένα αρχείο. Η εφαρμογή προορισμού στη συνέχεια χρησιμοποιεί την αποσειριοποίηση για να εξάγει δεδομένα.tracτα δεδομένα από την εφαρμογή για περαιτέρω χρήση.

Η σειριοποίηση είναι μια έννοια στην οποία τα αντικείμενα κλάσης C# γράφονται ή σειριοποιούνται σε αρχεία. Ας υποθέσουμε ότι είχατε μια τάξη C# που ονομάζεται Tutorial. Και η κλάση έχει 2 ιδιότητες ID και όνομα Tutorials.

Το Serializing μπορεί να χρησιμοποιηθεί για την απευθείας εγγραφή των ιδιοτήτων δεδομένων της κλάσης Tutorial σε ένα αρχείο. Το Deserialization χρησιμοποιείται για την ανάγνωση των δεδομένων από το αρχείο και την κατασκευή του αντικειμένου Tutorial ξανά.

Τύποι σειριοποίησης σε C#

Η C# υποστηρίζει διάφορες μορφές σειριοποίησης και επιλέγετε μία με βάση το πού θα χρησιμοποιηθούν τα δεδομένα. Οι κύριοι τύποι παρατίθενται παρακάτω.

  • Δυαδική σειριοποίηση Μετατρέπει ένα αντικείμενο σε μια συμπαγή δυαδική ροή. Είναι γρήγορο αλλά όχι αναγνώσιμο από ανθρώπους και συνδέεται με το .NET.
  • Σειριακή XML χρησιμοποιεί την κλάση XmlSerializer για να γράψει τις δημόσιες ιδιότητες ενός αντικειμένου σε ένα αναγνώσιμο αρχείο XML.
  • Σειριοποίηση JSON χρησιμοποιεί το System.Text.Json ή το Newtonsoft.Json για την παραγωγή ελαφρού JSON, της πιο κοινής μορφής για web APIs.
  • σειριοποίηση SOAP Μορφοποιεί δεδομένα ως μηνύματα SOAP για παλαιότερες υπηρεσίες ιστού.

Πώς να σειριοποιήσετε ένα αντικείμενο στο C#

Ας δούμε ένα παράδειγμα για το πώς μπορούμε να το πετύχουμε αυτό.

Στο παράδειγμά μας, πρόκειται να εκτελέσουμε τα παρακάτω βήματα υψηλού επιπέδου στον κώδικα

  1. Δημιουργήστε μια κλάση που ονομάζεται Tutorial η οποία έχει 2 ιδιότητες, δηλαδή ID και Name
  2. Στη συνέχεια, θα δημιουργήσουμε ένα αντικείμενο από την κλάση και θα εκχωρήσουμε μια τιμή "1" στην ιδιότητα ID και μια τιμή ".Net" στην ιδιότητα name.
  3. Στη συνέχεια, θα χρησιμοποιήσουμε τη σειριοποίηση για να σειριοποιήσουμε το παραπάνω αντικείμενο σε ένα αρχείο που ονομάζεται Example.txt
  4. Τέλος, θα χρησιμοποιήσουμε deserialization για να αποσειροποιήσουμε το αντικείμενο από το αρχείο και να εμφανίσουμε τις τιμές στην Κονσόλα.

Εισαγάγετε τον παρακάτω κωδικό στο αρχείο program.cs της εφαρμογής της κονσόλας.

Βήμα 1) Προσθέστε την τάξη.

Το πρώτο βήμα είναι να προσθέσετε την κλάση που θα χρησιμοποιηθεί για σειριοποίηση

Σειριοποίηση αντικειμένου σε C#

Code Εξήγηση:-

  1. Η κλάση που πρέπει να σειριοποιηθεί πρέπει να έχει το χαρακτηριστικό [Serializable]. Αυτή είναι μια λέξη-κλειδί στο C#. Αυτή η λέξη-κλειδί επισυνάπτεται στη συνέχεια στην τάξη Tutorial. Εάν δεν αναφέρετε αυτό το χαρακτηριστικό, θα λάβετε ένα σφάλμα όταν προσπαθείτε να σειριοποιήσετε την τάξη.
  2. Ακολουθεί ο ορισμός της κλάσης που θα σειριοποιηθεί. Εδώ ορίζουμε μια κλάση που ονομάζεται "Tutorial" και παρέχουμε 2 ιδιότητες, η μία είναι "ID" και η άλλη είναι "Name".

Βήμα 2) Δημιουργήστε το αντικείμενο.

Σε αυτό το βήμα, πρώτα θα δημιουργήσουμε το αντικείμενο της κλάσης Tutorial και θα το σειριοποιήσουμε στο αρχείο που ονομάζεται Example.txt

Σειριοποίηση αντικειμένου σε C#

Code Εξήγηση:-

  1. Αρχικά, δημιουργούμε ένα αντικείμενο της κλάσης Tutorial. Στη συνέχεια εκχωρούμε την τιμή "1" στο ID και ".net" στην ιδιότητα ονόματος.
  2. Στη συνέχεια χρησιμοποιούμε την κλάση μορφοποιητή που χρησιμοποιείται για τη σειριοποίηση ή τη μετατροπή του αντικειμένου σε δυαδική μορφή. Τα δεδομένα στο αρχείο σε σειριοποίηση γίνονται σε δυαδική μορφή. Στη συνέχεια, δημιουργούμε ένα αντικείμενο ροής αρχείου. Το αντικείμενο ροής αρχείου χρησιμοποιείται για το άνοιγμα του αρχείου Example.txt για σκοπούς γραφής. Οι λέξεις-κλειδιά FileMode.Create και FileMode.Write χρησιμοποιούνται για να αναφέρουν συγκεκριμένα ότι το αρχείο θα πρέπει να ανοίγει για λόγους γραφής.
  3. Τέλος, χρησιμοποιούμε τη μέθοδο Serialize για να μεταφέρουμε τα δυαδικά δεδομένα στο αρχείο. Στη συνέχεια κλείνουμε το stream, από τη στιγμή που γράφουμε λειτουργία ειναι ΟΛΟΚΛΗΡΩΜΕΝΟ.

Βήμα 3) Χρησιμοποιήστε την αφαίρεση.

Τέλος, για να διασφαλίσουμε ότι τα δεδομένα υπάρχουν στο αρχείο, χρησιμοποιούμε την αποσειριοποίηση για να αποσειροποιήσουμε το αντικείμενο από το αρχείο.

Σειριοποίηση αντικειμένου σε 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 Εξήγηση:-

  1. Δημιουργούμε το αντικείμενο "μετάδοση” για να ανοίξετε το αρχείο Example.txt σε λειτουργία μόνο για ανάγνωση.
  2. Στη συνέχεια χρησιμοποιούμε την κλάση μορφοποιητή που χρησιμοποιείται για την αποσειροποίηση του αντικειμένου, το οποίο είναι αποθηκευμένο στο αρχείο Example.txt. Το αντικείμενο που επιστρέφεται ορίζεται στο αντικείμενο objne.
  3. Τέλος, εμφανίζουμε τις ιδιότητες του αντικειμένου «objnew» στην κονσόλα χρησιμοποιώντας τις ιδιότητες «ID» και «name».

Όταν οριστεί ο παραπάνω κώδικας και το έργο εκτελείται χρησιμοποιώντας Visual Studio, θα λάβετε την παρακάτω έξοδο.

Παραγωγή:-

Σειριοποίηση αντικειμένου σε C#

Μπορείτε να δείτε από την παραπάνω έξοδο ότι οι τιμές από το αρχείο αποσειροποιήθηκαν σωστά και εμφανίστηκαν στην κονσόλα.

Σειριοποίηση JSON σε C#

Το JSON είναι η πιο ευρέως χρησιμοποιούμενη μορφή για σύγχρονες εφαρμογές και web APIs. Το ενσωματωμένο System.Text.Json Το namespace σειριοποιεί και αποσειριοποιεί αντικείμενα με μία μόνο κλήση μεθόδου, όπως φαίνεται παρακάτω.

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

Παραγωγή:

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

Συχνές Ερωτήσεις

Η σειριοποίηση μετατρέπει ένα αντικείμενο C# σε μια ροή bytes (δυαδική, XML ή JSON) ώστε να μπορεί να αποθηκευτεί σε ένα αρχείο ή να σταλεί σε μια άλλη εφαρμογή. Η αποσειριοποίηση αναδομεί το αντικείμενο από αυτά τα δεδομένα.

Το χαρακτηριστικό [Serializable] σηματοδοτεί μια κλάση έτσι ώστε τα αντικείμενά της να μπορούν να σειριοποιηθούν. Χωρίς αυτό, η δυαδική σειριοποίηση δημιουργεί μια εξαίρεση όταν προσπαθείτε να γράψετε το αντικείμενο σε ένα αρχείο.

Η C# υποστηρίζει δυαδική σειριοποίηση (συμπαγής, μόνο .NET), σειριοποίηση XML μέσω XmlSerializer, σειριοποίηση JSON μέσω System.Text.Json και σειριοποίηση SOAP για παλαιότερες υπηρεσίες ιστού.

Η σειριοποίηση γράφει τα δεδομένα ενός αντικειμένου σε ένα αρχείο ή ροή, ενώ η αποσειριοποίηση διαβάζει αυτά τα δεδομένα και ανακατασκευάζει το αρχικό αντικείμενο στη μνήμη.

Το BinaryFormatter είναι πλέον παρωχημένο και θεωρείται μη ασφαλές επειδή μπορεί να εκτελέσει επιβλαβή κώδικα κατά την αποσειριοποίηση. Microsoft Συνιστά το System.Text.Json ή το XmlSerializer για νέες εφαρμογές.

Οι βοηθοί τεχνητής νοημοσύνης, όπως το GitHub Copilot, συμπληρώνουν αυτόματα τις κλήσεις Serialize και Deserialize, προσθέτουν το χαρακτηριστικό [Serializable] και δημιουργούν κώδικα σειριοποίησης JSON ή XML από ένα σύντομο σχόλιο.

Ναι. Τα εργαλεία που υποστηρίζονται από την τεχνητή νοημοσύνη δημιουργούν κλάσεις μοντέλων, επιλέγουν μεταξύ JSON, XML και δυαδικών μορφών και προσθέτουν χειρισμό σφαλμάτων, ώστε ο κώδικας σειριοποίησης να είναι ασφαλής και πλήρης.

Η δυαδική σειριοποίηση χρησιμοποιεί το System.Runtime.Serialization.Formatters.Binary, το JSON χρησιμοποιεί το System.Text.Json και το XML χρησιμοποιεί το System.Xml.Serialization.

Συνοψίστε αυτήν την ανάρτηση με: