Προγραμματισμός

Πώς να εργαστείτε με σειριοποίηση στο .Net

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

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

Η σειριοποίηση είναι απαραίτητη για να περάσετε ένα αντικείμενο μέσω του καλωδίου - διευκολύνει τη μετάδοση ενός αντικειμένου μέσω δικτύου. Επομένως, μπορείτε να αξιοποιήσετε τη σειριοποίηση για να μεταβιβάσετε ένα αντικείμενο από έναν τομέα εφαρμογής σε έναν άλλο. Μπορείτε επίσης να επωφεληθείτε από τη σειριοποίηση για να δημιουργήσετε έναν κλώνο ενός αντικειμένου.

Ωστόσο, η σειριοποίηση είναι επίσης δαπανηρή λόγω των γενικών πόρων που εμπλέκονται στη σειριοποίηση και την απο-σειριοποίηση αντικειμένων. Για να εργαστείτε με το Serialization στο .Net θα πρέπει να επωφεληθείτε από το System.Runtime.Serialization namespace, δηλαδή θα πρέπει να συμπεριλάβετε αυτόν τον χώρο ονομάτων στο πρόγραμμά σας.

Μπορείτε να κάνετε μια κλάση σειριοποιήσιμη χρησιμοποιώντας το χαρακτηριστικό [Serializable]. Ακολουθεί ένα παράδειγμα που δείχνει πώς μπορείτε να εφαρμόσετε αυτό το χαρακτηριστικό σε μια τάξη.

[Σειριοποιήσιμος]

προϊόν δημόσιας τάξης

{

δημόσιο int productCode;

public string productName;

}

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

[Σειριοποιήσιμος]

προϊόν δημόσιας τάξης

    {

δημόσιο int productCode;

public string productName;

[Μη Σειροποιημένο ()]

δημόσιο διπλό προϊόν Τιμή

    }

Το πλαίσιο .Net παρέχει υποστήριξη για τους ακόλουθους τύπους σειριοποίησης.

  1. Δυάδικος
  2. ΣΑΠΟΥΝΙ
  3. XML
  4. Εθιμο

Δυαδική σειριοποίηση

Η δυαδική σειριοποίηση είναι η ταχύτερη από όλες τις τεχνικές σειριοποίησης - μπορεί να χρησιμοποιηθεί για σειριοποίηση ενός αντικειμένου σε δυαδική ροή. Είναι ένας τύπος σειριοποίησης που μπορεί να χρησιμοποιηθεί για σειριοποίηση ενός αντικειμένου σε μια ροή εξόδου διατηρώντας ταυτόχρονα την ταυτότητα του αντικειμένου - οι πληροφορίες τύπου δεν χάνονται στη διαδικασία σειριοποίησης. Σημειώστε ότι όταν χρησιμοποιείτε δυαδική σειριοποίηση, το αντικείμενο αποθηκεύεται στο σύνολό του. Για να εργαστείτε με δυαδική σειριοποίηση, πρέπει να συμπεριλάβετε το System.Runtime.Serialization.Formatters.Binary namespace.

Σειριοποίηση σαπουνιών

Η σειριοποίηση SOAP (Simple Object Access Protocol) είναι μια καλή επιλογή όταν θέλετε να μεταφέρετε αντικείμενα από μία εφαρμογή σε άλλη όταν αυτές οι εφαρμογές χρησιμοποιούν ετερογενείς αρχιτεκτονικές. Στην ουσία, το κύριο πλεονέκτημα της χρήσης σειριοποίησης SOAP είναι η φορητότητα. Η σειριοποίηση SOAP μπορεί να χρησιμοποιηθεί για σειριοποίηση ενός αντικειμένου σε μορφή SOAP. Για να εργαστείτε με την σειριοποίηση SOAP θα πρέπει να συμπεριλάβετε το System.Runtime.Serialization.Formatters.Sapap namespace στο πρόγραμμά σας. Λάβετε υπόψη ότι, όπως η σειριοποίηση XML, τα αντικείμενα που έχουν σειριοποιηθεί με τη σειριοποίηση SOAP διατηρούνται ως XML.

Σειριοποίηση XML

Το XML Serialization είναι ένας τύπος σειριοποίησης που χρησιμοποιείται για τη σειριοποίηση των δημόσιων μελών μιας παρουσίας μιας κλάσης σε μια ροή XML. Σημειώστε ότι η σειριοποίηση XML είναι αργή σε σύγκριση με τη δυαδική σειριοποίηση - στην πραγματικότητα είναι πολύ πιο αργή. Το πρωταρχικό πλεονέκτημα της σειράς XML είναι ότι παρέχει υποστήριξη μεταξύ πλατφορμών και επειδή βασίζεται σε κείμενο, είναι αναγνώσιμη και μπορεί επίσης να επεξεργαστεί. Μπορείτε να επωφεληθείτε από το XmlAttribute και να το ορίσετε σε μια ιδιότητα για να επιτρέψετε την ιδιοκτησία της σειριοποίησης χρησιμοποιώντας XML serialization. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να χρησιμοποιήσετε το XmlAttribute σε μια ιδιότητα.

[XmlAttribute ("productName")]

δημόσια συμβολοσειρά ProductName

{

παίρνω

  {

επιστροφή productName;

  }

σειρά

  {

productName = τιμή;

  }

}

Για σειριοποίηση και απο-σειριοποίηση ενός αντικειμένου χρησιμοποιώντας σειριοποίηση XML μπορείτε να χρησιμοποιήσετε το XmlSerializer. Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να σειριοποιήσετε ένα αντικείμενο χρησιμοποιώντας σειριοποίηση XML - σημειώστε πώς χρησιμοποιείται το XmlSerializer.

XmlSerializer xmlSerializer = νέο XmlSerializer (typeof (Προϊόν));

χρησιμοποιώντας (TextWriter textWriter = new StreamWriter (@ "D: \ Product.xml"))

 {

xmlSerializer.Serialize (textWriter, productObject);

 }

Προσαρμοσμένη σειριοποίηση

Μπορείτε να αξιοποιήσετε την προσαρμοσμένη σειριοποίηση για να ελέγξετε πώς μια παρουσία ενός τύπου μπορεί να σειριοποιηθεί και να αποστειρωθεί. Μπορείτε να εφαρμόσετε προσαρμοσμένη σειριοποίηση εφαρμόζοντας τη διεπαφή ISerializable. Η διεπαφή ISerializable δηλώνει τη μέθοδο GetObjectData (). Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να εφαρμόσετε προσαρμοσμένη τεχνική σειριοποίησης εφαρμόζοντας τη διεπαφή ISerializable.

[Σειριοποιήσιμος]

Δημόσια τάξη Προϊόν: ΙΑΕ

{

public void GetObjectData (Πληροφορίες SerializationInfo, περιβάλλον StreamingContext)

    {

// Συνήθης κωδικός

    }

}