Kürzlich wollte Bruder Shuang den Entwicklermodus des öffentlichen WeChat-Accounts ausprobieren und beantragte ein Konto auf der öffentlichen WeChat-Plattform. Dann habe ich mir die Oberfläche-Anleitung der offenen Plattform angesehen, er hat einen Link in die Gruppe gelegt, WeChat ist in letzter Zeit überhitzt, ich habe neugierig auch angeklickt.
Klicken Sie auf die Nachrichtenschnittstelle, wir sehen, dass die Nachrichtenoberfläche der öffentlichen Plattform XML für die Dateninteraktion verwendet. Für die Bequemlichkeit der Datenmanipulation serialisieren und deserialisieren wir XML meist. Serialisierung ist der Prozess, den Zustand eines Objekts in ein Format umzuwandeln, das gepflegt oder übertragen werden kann. Das Gegenteil der Serialisierung ist Deserialisierung, bei der Ströme in Objekte umgewandelt werden. Diese beiden Prozesse zusammen machen es einfach, Daten zu speichern und zu übertragen.
Sprechen wir zuerst über Serialisierung, nehmen wir das XML-Format zur Antwort auf grafische Nachrichten als Beispiel, denn dieses Format umfasst im Grunde alle oben genannten Nachrichten-Push- und Nachrichtenantworten.
Wenn <xml><Articles>wir die Datenantwort von der öffentlichen Plattform POST erhalten, um die Ausgabe zurückzugeben, verwenden wir XML-Serialisierung, das heißt, um das Antwortdatenobjekt in das von der öffentliche Plattform bereitgestellte XML-Datenformat zu konvertieren, was für die Datenübertragung praktisch ist. Serialisierung Hier habe ich einen einfachen Beispielcode in C# geschrieben. Um den serialisierten String zu erhalten, Es gibt keinen direkten Output, natürlich kannst du in deinem Projekt direkt Response.Output verwenden.
Hier wird erwähnt, dass der Name des XML-Root-Elements, das von der Serialize-Methode der XmlSerializer-Klasse generiert wird, standardmäßig auf den Namen der Serialisierungsklasse zurückfällt. Warum fühle ich mich beim Lesen dieses Satzes so überrascht? Und ich möchte kein bedeutungsloses Wort wie xml als Klassennamen verwenden, wir müssen der Serialisierungsklasse [XmlRoot(ElementName = "xml")] ein Property-Tag hinzufügen, um anzugeben, dass das generierte XML-Element xml heißt. Wenn Sie dieses Tag nicht hinzufügen und Ihr Serialisierungsklassenname nicht mit dem Root-Element-Namen von XML übereinstimmt, erhalten Sie immer einen Fehler im Dokumentformat.
Nachdem wir das Wurzelelement erhalten haben, müssen wir das Problem des Sammlungsknotens der Artikel lösen; zu diesem Zeitpunkt müssen wir eine neue Liste starker Typen erstellen, und die Variable heißt Articles Public Property.
XmlArrayItemAttribute ist ein abgeleiteter Typ, der angibt, dass der XmlSerializer in einem serialisierten Array platziert werden kann. Nach der Erstellung der Klasse, dem Debuggen und dem Anschauen gibt es im Grunde kein großes Problem.
Sprechen wir über Deserialisierung. Wenn ein gewöhnlicher WeChat-Nutzer eine Nachricht an das öffentliche Konto sendet, wird der WeChat-Server die Nachricht auf die ausgefüllte URL POSTEN. Derzeit müssen wir die empfangenen Daten in die Objekte deserialisieren, die wir für den einfachen Betrieb und die Speicherung benötigen. Normalerweise verwenden wir Request.Form["param"], um die Daten des Posts zu erhalten, und viele Entwickler stellen fest, dass die Daten von POST keine Parameter haben, wenn sie sich die Schnittstellendokumentation ansehen, und sie sind verwirrt und wissen nicht, wie sie die Daten bekommen sollen. Hier verwenden wir Request.InputStream, um den Inhalt des eingehenden HTTP-Entitätskörpers zu erhalten. Weitere Informationen finden Sie in diesem Artikel: http://blog.sina.com.cn/s/blog_9fa44b550101ee3r.html
Deserialisierung Hier habe ich einen einfachen Beispielcode in C# geschrieben.
Hier, da es sich um einen String handelt, der die XML-Beispieldaten direkt kopiert, die auf die grafische Nachricht antworten, wird die Überladung von Deserialize (TextReader textReader) verwendet; natürlich kann man im Projekt direkt die Überladung von Deserialize (Stream stream) verwenden.
Für Fragen zur XML-Serialisierung siehe diesen Artikel auf MSDN über XML- und SOAP-Serialisierung
Ich habe die entsprechende Instanzcode-Datei auf Github unter XmlSerializerExample eingestellt
Schreib schnell und mach einfach eine Markierung. Ich habe nachts nicht genug gegessen und jetzt fühle ich mich übel. Ich muss schnell ins Bett. Falls es Fehler gibt, korrigiert sie bitte.
Originallink:
http://imr3.com/tech/weixin-message-api-serialize
|