Äskettäin veli Shuang halusi kokeilla WeChat-julkisen tilin kehittäjätilaa ja haki tiliä WeChatin julkiselle alustalle. Sitten menin katsomaan avoimen alustan käyttöliittymäopasta, hän laittoi linkin ryhmään, WeChat on viime aikoina ylikuumentunut ja klikkasin myös uteliaana.
Klikkaa viestikäyttöliittymän opasta, niin näemme, että julkisen alustan viestirajapinta käyttää XML:ää datan vuorovaikutukseen. Tietojen käsittelyn helppouden vuoksi yleensä sarjoitamme ja deserialisoimme XML:n. Sarjoittaminen on prosessi, jossa objektin tila muunnetaan muotoon, jota voidaan ylläpitää tai siirtää. Sarjoituksen vastakohta on deserialisointi, joka muuntaa virrat objekteiksi. Nämä kaksi prosessia yhdessä tekevät datan tallentamisesta ja siirrosta helppoa.
Puhutaan ensin sarjallistamisesta, otetaan esimerkiksi XML-muoto, jossa vastataan graafisiin viesteihin, koska tämä muoto sisältää käytännössä kaikki yllä mainitut viestin push- ja viestivastaukset.
Kun <xml><Articles>saamme datavastauksen julkiselta alustalta POST, joka palauttaa tuloksen, käytämme XML-sarjoittamista, eli muuntamaan vastausdatan objektin julkisen alustan tarjoamaan XML-datamuotoon, joka on kätevä tiedonsiirtoon. Sarjoittaminen Tässä kirjoitin yksinkertaisen esimerkkikoodin C#:lla. Sarjallisen merkkijonon saamiseksi Suoraa tulostusta ei ole, tietenkin projektissasi voit käyttää suoraan Response.Outputia.
Tässä mainitaan, että XML-juurielementin nimi, joka on tuotettu XmlSerializer-luokan Serialize-menetelmällä, on oletuksena sarjallistamisluokan nimi. Miksi tunnen itseni niin kielenkäännökseltä, kun luen tätä lausetta? Enkä halua käyttää merkityksetöntä sanaa kuten xml luokan nimenä, meidän täytyy lisätä ominaisuustagi sarjallistamisluokkaan [XmlRoot(ElementName = "xml")] määritelläksemme, että generoitu XML-elementti on nimeltään xml. Jos et lisää tätä tagia, jos sarjallistamisluokkasi nimi ei vastaa XML:n juurielementin nimeä, saat aina dokumenttimuotovirheen.
Kun juurialkio on saatu, meidän täytyy ratkaista artikkeleiden kokoelmasolmun ongelma; tässä vaiheessa meidän täytyy luoda uusi lista vahvoista tyypeistä, ja muuttujaa kutsutaan nimellä Artikkelit julkinen omaisuus.
XmlArrayItemAttribute on johdettu tyyppi, joka määrittelee, että XmlSerializer voidaan sijoittaa sarjalliseen taulukkoon. Kun luo luokan, debuggaa ja tarkastellaan sitä, ei oikeastaan ole mitään suurta ongelmaa.
Puhutaanpa deserialisoinnista. Kun tavallinen WeChat-käyttäjä lähettää viestin julkiselle tilille, WeChat-palvelin JULKAISEE viestin täytettyyn URL-osoitteeseen. Tällä hetkellä meidän täytyy deserialisoida vastaanotettu data niihin objekteihin, joita tarvitsemme helppoa käyttöä ja tallennusta varten. Yleensä käytämme Request.Form["param"] -tiedostoa Postin datan saamiseksi, ja monet kehittäjät huomaavat, ettei POSTin datalla ole parametreja rajapinnan dokumentaatiota tarkastellessaan, ja he ovat hämmentyneitä eivätkä tiedä, miten tiedot saadaan. Tässä käytämme Request.InputStreamia saadaksemme saapuvan HTTP-entiteettirungon sisällön. Lisätietoja saat tästä artikkelista: http://blog.sina.com.cn/s/blog_9fa44b550101ee3r.html
Deserialointi Tässä kirjoitin yksinkertaisen esimerkkikoodin C#:lla.
Koska kyseessä on merkkijono, joka suoraan kopioi xml-näytedatan, joka vastaa grafiikkaviestiin, käytetään Deserialize-ylikuormitusta (TextReader textReader), tietenkin voit käyttää suoraan Deserialize-ylikuormitusta (Stream stream) projektissa.
Kysymyksiin XML-sarjoituksesta löytyy tästä MSDN-artikkelista, joka käsittelee XML- ja SOAP-sarjoittamista
Olen laittanut asiaankuuluvan instanssikooditiedoston githubiin osoitteeseen XmlSerializerExample
Kirjoita nopeasti ja tee vain merkki. En syönyt tarpeeksi illalla ja nyt minulla on pahoinvointia. Minun täytyy mennä nopeasti nukkumaan. Jos virheitä on, korjaa ne, kiitos.
Alkuperäinen linkki:
http://imr3.com/tech/weixin-message-api-serialize
|