Serialization και Deserialization σε C# με Παράδειγμα
⚡ Έξυπνη Σύνοψη
Η σειριοποίηση σε C# μετατρέπει ένα αντικείμενο σε μια ροή bytes, ώστε να μπορεί να αποθηκευτεί σε ένα αρχείο ή να αποσταλεί μεταξύ εφαρμογών. Η αποσειριοποίηση αναδομεί το αντικείμενο. Εδώ θα μάθετε να σειριοποιείτε και να αποσειριοποιείτε αντικείμενα με παραδείγματα.
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#
Ας δούμε ένα παράδειγμα για το πώς μπορούμε να το πετύχουμε αυτό.
Στο παράδειγμά μας, πρόκειται να εκτελέσουμε τα παρακάτω βήματα υψηλού επιπέδου στον κώδικα
- Δημιουργήστε μια κλάση που ονομάζεται Tutorial η οποία έχει 2 ιδιότητες, δηλαδή ID και Name
- Στη συνέχεια, θα δημιουργήσουμε ένα αντικείμενο από την κλάση και θα εκχωρήσουμε μια τιμή "1" στην ιδιότητα ID και μια τιμή ".Net" στην ιδιότητα name.
- Στη συνέχεια, θα χρησιμοποιήσουμε τη σειριοποίηση για να σειριοποιήσουμε το παραπάνω αντικείμενο σε ένα αρχείο που ονομάζεται Example.txt
- Τέλος, θα χρησιμοποιήσουμε deserialization για να αποσειροποιήσουμε το αντικείμενο από το αρχείο και να εμφανίσουμε τις τιμές στην Κονσόλα.
Εισαγάγετε τον παρακάτω κωδικό στο αρχείο program.cs της εφαρμογής της κονσόλας.
Βήμα 1) Προσθέστε την τάξη.
Το πρώτο βήμα είναι να προσθέσετε την κλάση που θα χρησιμοποιηθεί για σειριοποίηση
Code Εξήγηση:-
- Η κλάση που πρέπει να σειριοποιηθεί πρέπει να έχει το χαρακτηριστικό [Serializable]. Αυτή είναι μια λέξη-κλειδί στο C#. Αυτή η λέξη-κλειδί επισυνάπτεται στη συνέχεια στην τάξη Tutorial. Εάν δεν αναφέρετε αυτό το χαρακτηριστικό, θα λάβετε ένα σφάλμα όταν προσπαθείτε να σειριοποιήσετε την τάξη.
- Ακολουθεί ο ορισμός της κλάσης που θα σειριοποιηθεί. Εδώ ορίζουμε μια κλάση που ονομάζεται "Tutorial" και παρέχουμε 2 ιδιότητες, η μία είναι "ID" και η άλλη είναι "Name".
Βήμα 2) Δημιουργήστε το αντικείμενο.
Σε αυτό το βήμα, πρώτα θα δημιουργήσουμε το αντικείμενο της κλάσης Tutorial και θα το σειριοποιήσουμε στο αρχείο που ονομάζεται Example.txt
Code Εξήγηση:-
- Αρχικά, δημιουργούμε ένα αντικείμενο της κλάσης Tutorial. Στη συνέχεια εκχωρούμε την τιμή "1" στο ID και ".net" στην ιδιότητα ονόματος.
- Στη συνέχεια χρησιμοποιούμε την κλάση μορφοποιητή που χρησιμοποιείται για τη σειριοποίηση ή τη μετατροπή του αντικειμένου σε δυαδική μορφή. Τα δεδομένα στο αρχείο σε σειριοποίηση γίνονται σε δυαδική μορφή. Στη συνέχεια, δημιουργούμε ένα αντικείμενο ροής αρχείου. Το αντικείμενο ροής αρχείου χρησιμοποιείται για το άνοιγμα του αρχείου Example.txt για σκοπούς γραφής. Οι λέξεις-κλειδιά FileMode.Create και FileMode.Write χρησιμοποιούνται για να αναφέρουν συγκεκριμένα ότι το αρχείο θα πρέπει να ανοίγει για λόγους γραφής.
- Τέλος, χρησιμοποιούμε τη μέθοδο Serialize για να μεταφέρουμε τα δυαδικά δεδομένα στο αρχείο. Στη συνέχεια κλείνουμε το stream, από τη στιγμή που γράφουμε λειτουργία ειναι ΟΛΟΚΛΗΡΩΜΕΝΟ.
Βήμα 3) Χρησιμοποιήστε την αφαίρεση.
Τέλος, για να διασφαλίσουμε ότι τα δεδομένα υπάρχουν στο αρχείο, χρησιμοποιούμε την αποσειριοποίηση για να αποσειροποιήσουμε το αντικείμενο από το αρχείο.
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 Εξήγηση:-
- Δημιουργούμε το αντικείμενο "μετάδοση” για να ανοίξετε το αρχείο Example.txt σε λειτουργία μόνο για ανάγνωση.
- Στη συνέχεια χρησιμοποιούμε την κλάση μορφοποιητή που χρησιμοποιείται για την αποσειροποίηση του αντικειμένου, το οποίο είναι αποθηκευμένο στο αρχείο Example.txt. Το αντικείμενο που επιστρέφεται ορίζεται στο αντικείμενο objne.
- Τέλος, εμφανίζουμε τις ιδιότητες του αντικειμένου «objnew» στην κονσόλα χρησιμοποιώντας τις ιδιότητες «ID» και «name».
Όταν οριστεί ο παραπάνω κώδικας και το έργο εκτελείται χρησιμοποιώντας Visual Studio, θα λάβετε την παρακάτω έξοδο.
Παραγωγή:-
Μπορείτε να δείτε από την παραπάνω έξοδο ότι οι τιμές από το αρχείο αποσειροποιήθηκαν σωστά και εμφανίστηκαν στην κονσόλα.
Σειριοποίηση 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





