Recent, fratele Shuang a vrut să încerce modul de dezvoltator al contului public WeChat și a aplicat pentru un cont pe platforma publică WeChat. Apoi am mers să văd ghidul de interfață al platformei deschise, el a pus un link în grup, WeChat s-a supraîncălzit recent, am dat și eu click curios.
Faceți clic pe ghidul interfeței de mesaje, putem vedea că interfața de mesaje a platformei publice folosește XML pentru interacțiunea cu datele. Pentru comoditatea manipulării datelor, de obicei serializăm și deserializăm XML. Serializarea este procesul de conversie a stării unui obiect într-un format care poate fi menținut sau transferat. Opusul serializării este deserializarea, care transformă fluxurile în obiecte. Aceste două procese se combină pentru a face ușoară stocarea și transferul datelor.
Să vorbim mai întâi despre serializare, să luăm ca exemplu formatul XML de răspuns la mesaje grafice, deoarece acest format include practic toate mesajele push și răspunsurile de mai sus.
Când <xml><Articles>primim răspunsul la date de la platforma publică POST pentru a returna rezultatul, folosim serializarea XML, adică pentru a converti obiectul de date de răspuns în formatul de date XML oferit de platforma publică, ceea ce este convenabil pentru transmiterea datelor. Serializare Aici am scris un cod exemplu simplu în C#. Pentru a obține șirul serializat, Nu există un output direct, desigur că în proiectul tău poți face direct Response.Output.
Se menționează aici că numele elementului rădăcină XML generat de metoda Serialize a clasei XmlSerializer este implicit denumirea clasei de serializare. De ce mă simt atât de încurcat când citesc această propoziție? Și nu vreau să folosesc un cuvânt fără sens precum xml ca nume de clasă, trebuie să adăugăm o etichetă de proprietate clasei de serializare [XmlRoot(ElementName = "xml")] pentru a specifica că elementul XML generat se numește xml. Dacă nu adaugi această etichetă, dacă numele clasei tale de serializare nu corespunde cu numele elementului rădăcină al XML, vei primi întotdeauna o eroare de format al documentului.
După obținerea elementului rădăcină, trebuie să rezolvăm problema nodului de colecție al Articolelor, iar în acest moment trebuie să creăm o nouă listă de tipuri puternice, iar variabila se numește proprietate publică Articole.
XmlArrayItemAttribute este un tip derivat care specifică faptul că XmlSerializer poate fi plasat într-un tablou serializat. După ce am creat clasa, am depanat și am analizat-o, practic nu există o problemă mare.
Să vorbim despre deserializare. Când un utilizator obișnuit WeChat trimite un mesaj către contul public, serverul WeChat va POSTA mesajul pe URL-ul complet. În acest moment, trebuie să deserializăm datele primite în obiectele de care avem nevoie pentru o operare și stocare ușoară. De obicei folosim Request.Form["param"] pentru a obține datele Postului, iar mulți dezvoltatori constată că datele POST nu au parametri când se uită la documentația interfeței și sunt confuzi și nu știu cum să obțină datele. Aici folosim Request.InputStream pentru a obține conținutul corpului entității HTTP care intră. Pentru mai multe informații, vă rugăm să consultați acest articol: http://blog.sina.com.cn/s/blog_9fa44b550101ee3r.html
Deserializare Aici am scris un cod exemplu simplu în C#.
Aici, deoarece este un șir care copiază direct datele xml care răspund mesajului grafic, se folosește supraîncărcarea Deserialize (TextReader textReader), desigur, poți folosi direct supraîncărcarea Deserialize (fluxul de flux) în proiect.
Pentru întrebări despre serializarea XML, consultați acest articol despre MSDN despre serializarea XML și SOAP
Am pus fișierul de cod de instanță relevant pe github la XmlSerializerExample
Scrie repede și pur și simplu lasă o urmă. Nu am mâncat suficient noaptea și acum mă simt greață. Trebuie să mă culc repede. Dacă există greșeli, vă rugăm să le corectați.
Link original:
http://imr3.com/tech/weixin-message-api-serialize
|