Μαθήματα Πληροφορικής & Προγραμματισμού

JSON object serialization στη C-Sharp

JSON object serialization στη C-Sharp είναι όρος που αναφέρεται στη διαδικασία δημιουργίας ενός αντικειμένου μίας κλάσης με τη χρήση πληροφορίας, η οποία έχει προέλθει από συναλλαγή/ ροή πληροφορίας της μορφής Json, και χρήζει διάσπασης στα επιμέρους τμήματά της. Η συναλλαγή αυτή μπορεί να αφορά σε ανάγνωση αρχείου από το δίσκο, ανταλλαγή πληροφορίας μεταξύ επικοινωνούντων εφαρμογών αλλά και απομακρυσμένων διαφορετικών πλατφορμών μέσω διαδικτύου. Στο άρθρο αυτό παρατίθενται τα βήματα για την αξιοποίηση πληροφορίας που ανακτήθηκε από το Διαδίκτυο.

Το JSON (JavaScript Object Notation) είναι ένα είδος αναπαράστασης της πληροφορίας, το οποίο χρησιμοποιείται για την ανταλλαγή δεδομένων. Μαζί με την XML αποτελούν τα κύρια format αρχείων για τη ροή πληροφορίας διαδικτυακά. Αποτελεί υποσύνολο της JavaScript και λειτουργεί ανεξαρτήτως γλώσσας προγραμματισμού. Είναι “ελαφρύ” σε όγκο και εύκολο στο χειρισμό, καθώς το είδος βασίζεται σε αμοιβαίες παραδοχές της οικογένειας των προγραμματιστών της C (C, C++, C#, Java, JavaScript, Perl, Python κ.ά.).

Το JSON δημιουργείται σε δύο μορφές:

  • Μία συλλογή από ζεύγη ονόματος και τιμής, που σε πολλές γλώσσες θεωρείται ως ένα αντικείμενο/ δομή/ εγγραφή/ συσχετισμένος πίνακας.
  • Μία ταξινομημένη λίστα τιμών, που γίνεται αντιληπτή ως πίνακας ή λίστα.

Οι παραπάνω είναι δομές δεδομένων παγκόσμιου βεληνεκούς. Υποστηρίζονται -με τον ένα ή τον άλλο τρόπο- από όλες τις σύγχρονες γλώσσες προγραμματισμού, γεγονός που καθιστά το Json format ιδανική επιλογή για την ανταλλαγή πληροφορίας από μία πλατφόρμα σε άλλη.

JSON object serialization στη C-Sharp: Δήλωση βιβλιοθήκης για τη χρήση των μεθόδων

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

using System.Runtime.Serialization.Json;

.
Όπως βλέπουμε, η βιβλιοθήκη πηγάζει από τη βασική βιβλιοθήκη του συστήματος “System”. Η δήλωση αυτή θα μας επιτρέψει της δημιουργία αντικειμένου κατάλληλα διαμορφωμένου ώστε να πραγματοποιήσει τη διαδικασία που επιθυμούμε.

Εγγραφή πληροφορίας από διαδικτυακή πηγή σε αρχείο

Επισκεπτόμενοι την εξής σελίδα δες εδώ: jsontest παρατηρούμε ότι αυτή εμφανίζει τα στοιχεία της τρέχουσας ημερομηνίας και ώρας, όπως φαίνεται παρακάτω:

{
“time”: “03:53:25 AM”,
“milliseconds_since_epoch”: 1362196405309,
“date”: “26-06-2016”
}
Έστω ότι θέλουμε να αποθηκεύσουμε στην εφαρμογή μας τα στοιχεία αυτά.

JSON object serialization στη C-Sharp: Δημιουργία της κλάσης και του αντικειμένου

Δημιουργούμε στο πρόγραμμα μία κλάση με ισάριθμα και ομώνυμα properties με αυτά που εμφανίζει η σελίδα. Ο κώδικας τη κλάσης φαίνεται παρακάτω:

public class ClassDateTime
{
public string  time { get; set; }
public string milliseconds_since_epoch { get; set; }
public string date { get; set; }
}

Και δημιουργούμε ένα instance αυτής στο κυρίως πρόγραμμα:

ClassDateTime value = new ClassDateTime();

Επόμενο βήμα είναι η δημιουργία ενός stream (ροής) το οποίο θα “γεμίζει” από την πληροφορία που επιθυμούμε.

Δημιουργία HttpClient και Stream

Οπότε για την επίσκεψη στη σελίδα μέσω της εφαρμογής μας δημιουργούμε το εξής αντικείμενο:

HttpClient myClient = new HttpClient();

και για τη δημιουργία και το γέμισμα της ροής το εξής αντικείμενο:

Stream myStream = await myClient.GetStreamAsync(@"http://date.jsontest.com/"); .

Η δεσμευμένη λέξη await απαιτείται για την κλήση της ασύγχρονης μεθόδου GetStreamAsync(). Οι ασύγχρονες μέθοδοι κρίνονται ζωτικές κατά την ανάκτηση μεγάλου όγκου πληροφορίας ή σε διαδικτυακές διαδικασίες συναλλαγής, όταν δε θέλουμε να αναγκάζουμε το main thred της εφαρμογής μας σε αναμονή, έως ότου η συναλλαγή ολοκληρωθεί.

JSON object serialization στη C-Sharp: Δημιουργία και χρήση DataContractJsonSerializer

Εφόσον έχουμε δημιουργήσει το αντικείμενο value τύπου ClassDateTime και έχουμε γεμίσει το stream με την πληροφορία που θέλουμε να αποθηκεύσουμε στο πρώτο, δημιουργούμε ένα instance της κλάσης DataContractJsonSerializer, αντικείμενο το οποίο θα διασπάσει την ανακτηθείσα πληροφορία στα πεδία που θέλουμε και θα γεμίσει τα properties του αντικειμένου value της κλάσης ClassDateTime με τιμές.
Για τη δήλωση και τον τύπο του αντικειμένου διάσπασης της πληροφορίας έχουμε τής εξής εντολή:

DataContractJsonSerializer mySerializer = new DataContractJsonSerializer(typeof(ClassDateTime));

όπου το όρισμα του κονστράκτορα είναι ο τύπος του αντικειμένου προς χειρισμό.

Για το γέμισμα του αντικειμένου value έχουμε την εξής εντολή:

value = (ClassDateTime)serializer.ReadObject(myStream);

όπου το όρισμα της μεθόδου ReadObject() είναι το όνομα της ροής που δημιουργήσαμε προηγουμένως. Παρατηρούμε ακριβώς μετά τον τελεστή εκχώρησης “=”, τη χρήση impicit casting στον τύπο της κλάσης για το αντικείμενο που θα γεμίζει από τη ροή.

Η διαδικασία του JSON object serialization στο σημείο αυτό έχει ολοκληρωθεί. Ο serializer έχει “διαβάσει” την πληροφορία της ροής και την έχει διασπάσει στα αντίστοιχα PROPERTIES του αντικειμένου. Η εκχώρηση πραγματοποιείται στην ίδια γραμμή εντολής, καθώς το αποτέλεσμα της μεθόδου ReadObject(myStream) εκχωρείται ως τιμή στο αντικείμενο value.

Για την επαλήθευση της ορθής λειτουργίας του κώδικα, προσθέτουμε στο πρόγραμμα της εξής εντολή:

Console.WriteLine("date retrieved: {0}, time retrieved: {1}, milliseconds: {2}" ,  value.date ,  value.time,  value.milliseconds_since_epoch);

Το αποτέλεσμα στην οθόνη είναι το ακόλουθο:

date retrieved: 26-06-2016,   time retrieved: 03:53:25 AM,    milliseconds:  1362196405309

Αφήστε ένα Σχόλιο

Η ηλ. διεύθυνση σας δεν δημοσιεύεται. Τα υποχρεωτικά πεδία σημειώνονται με *

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει τα ανεπιθύμητα σχόλια. Μάθετε πώς υφίστανται επεξεργασία τα δεδομένα των σχολίων σας.