Πρόσφατα, ο αδελφός Shuang ήθελε να δοκιμάσει τη λειτουργία προγραμματιστή του δημόσιου λογαριασμού WeChat και έκανε αίτηση για λογαριασμό στη δημόσια πλατφόρμα WeChat. Μετά πήγα να δω τον οδηγό διεπαφής της ανοιχτής πλατφόρμας, έβαλε έναν σύνδεσμο στην ομάδα, το WeChat έχει υπερθερμανθεί πρόσφατα, έκανα επίσης κλικ με περιέργεια.
Κάντε κλικ στον οδηγό διεπαφής μηνυμάτων, μπορούμε να δούμε ότι η διεπαφή μηνυμάτων της δημόσιας πλατφόρμας χρησιμοποιεί XML για αλληλεπίδραση δεδομένων. Για τη διευκόλυνση του χειρισμού δεδομένων, συνήθως σειριοποιούμε και αποσειριοποιούμε την XML. Η σειριοποίηση είναι η διαδικασία μετατροπής της κατάστασης ενός αντικειμένου σε μορφή που μπορεί να διατηρηθεί ή να μεταφερθεί. Το αντίθετο της σειριοποίησης είναι η αποσειριοποίηση, η οποία μετατρέπει τα ρεύματα σε αντικείμενα. Αυτές οι δύο διαδικασίες συνδυάζονται για να διευκολύνουν την αποθήκευση και τη μεταφορά δεδομένων.
Ας μιλήσουμε πρώτα για τη σειριοποίηση, ας πάρουμε ως παράδειγμα τη μορφή XML απάντησης σε γραφικά μηνύματα, επειδή αυτή η μορφή περιλαμβάνει βασικά όλα τα παραπάνω push μηνυμάτων και απάντηση μηνυμάτων.
Όταν <xml><Articles>λαμβάνουμε την απόκριση δεδομένων από τη δημόσια πλατφόρμα POST για να επιστρέψουμε την έξοδο, χρησιμοποιούμε σειριοποίηση XML, δηλαδή για να μετατρέψουμε το αντικείμενο δεδομένων απόκρισης στη μορφή δεδομένων XML που παρέχεται από τη δημόσια πλατφόρμα, η οποία είναι βολική για τη μετάδοση δεδομένων. Σειριοποίηση Εδώ έγραψα ένα απλό παράδειγμα κώδικα σε C#. Για να αποκτήσετε τη σειριοποιημένη συμβολοσειρά, Δεν υπάρχει άμεση έξοδος, φυσικά στο έργο σας μπορείτε να κάνετε απευθείας Response.Output.
Αναφέρεται εδώ ότι το όνομα του ριζικού στοιχείου XML που δημιουργείται από τη μέθοδο Serialize της κλάσης XmlSerializer είναι προεπιλεγμένο στο όνομα της κλάσης serialization. Γιατί νιώθω τόσο στριφογυριστή όταν διαβάζω αυτήν την πρόταση; Και δεν θέλω να χρησιμοποιήσω μια λέξη χωρίς νόημα όπως xml ως όνομα κλάσης, πρέπει να προσθέσουμε μια ετικέτα ιδιότητας στην κλάση σειριοποίησης [XmlRoot(ElementName = "xml")] για να καθορίσουμε ότι το στοιχείο XML που δημιουργείται ονομάζεται xml. Εάν δεν προσθέσετε αυτήν την ετικέτα, εάν το όνομα της κλάσης σειριοποίησης δεν αντιστοιχεί στο όνομα του ριζικού στοιχείου της XML, θα λαμβάνετε πάντα ένα σφάλμα μορφής εγγράφου.
Αφού λάβουμε το ριζικό στοιχείο, πρέπει να λύσουμε το πρόβλημα του κόμβου συλλογής των Άρθρων, αυτή τη στιγμή πρέπει να δημιουργήσουμε μια νέα λίστα ισχυρών τύπων και η μεταβλητή ονομάζεται Άρθρα δημόσια ιδιοκτησία.
Το XmlArrayItemAttribute είναι ένας παράγωγος τύπος που καθορίζει ότι το XmlSerializer μπορεί να τοποθετηθεί σε έναν σειριοποιημένο πίνακα. Μετά τη δημιουργία της κλάσης, τον εντοπισμό σφαλμάτων και την εξέτασή της, ουσιαστικά δεν υπάρχει μεγάλο πρόβλημα.
Ας μιλήσουμε για την αποσειριοποίηση. Όταν ένας απλός χρήστης του WeChat στέλνει ένα μήνυμα στον δημόσιο λογαριασμό, ο διακομιστής WeChat θα δημοσιεύσει το μήνυμα στη συμπληρωμένη διεύθυνση URL. Αυτή τη στιγμή, πρέπει να αποσειριοποιήσουμε τα ληφθέντα δεδομένα στα αντικείμενα που χρειαζόμαστε για εύκολη λειτουργία και αποθήκευση. Συνήθως χρησιμοποιούμε το Request.Form["param"] για να λάβουμε τα δεδομένα του Post και πολλοί προγραμματιστές διαπιστώνουν ότι τα δεδομένα του POST δεν έχουν παραμέτρους όταν κοιτάζουν την τεκμηρίωση της διεπαφής και είναι μπερδεμένοι και δεν ξέρουν πώς να πάρουν τα δεδομένα. Εδώ χρησιμοποιούμε το Request.InputStream για να λάβουμε το περιεχόμενο του εισερχόμενου σώματος οντότητας HTTP. Για περισσότερες πληροφορίες, ανατρέξτε σε αυτό το άρθρο: http://blog.sina.com.cn/s/blog_9fa44b550101ee3r.html
Αποσειριοποίηση Εδώ έγραψα ένα απλό παράδειγμα κώδικα σε C#.
Εδώ, επειδή είναι μια συμβολοσειρά που αντιγράφει απευθείας τα δείγματα δεδομένων xml που απαντά στο γραφικό μήνυμα, χρησιμοποιείται η υπερφόρτωση του Deserialize (TextReader textReader), φυσικά, μπορείτε να χρησιμοποιήσετε απευθείας την υπερφόρτωση του Deserialize (Ροή ροής) στο έργο.
Για ερωτήσεις σχετικά με τη σειριοποίηση XML, ανατρέξτε σε αυτό το άρθρο στο MSDN σχετικά με τη σειριοποίηση XML και SOAP
Έχω βάλει το σχετικό αρχείο κώδικα παρουσίας στο github στο XmlSerializerExample
Γράψτε βιαστικά και απλά κάντε ένα σημάδι. Δεν έτρωγα αρκετά το βράδυ και τώρα νιώθω ναυτία. Πρέπει να πάω για ύπνο γρήγορα. Εάν υπάρχουν λάθη, διορθώστε τα.
Αρχικός σύνδεσμος:
http://imr3.com/tech/weixin-message-api-serialize
|