Neseniai brolis Shuangas norėjo išbandyti "WeChat" viešosios paskyros kūrėjo režimą ir pateikė paraišką dėl paskyros "WeChat" viešojoje platformoje. Tada nuėjau pažiūrėti atviros platformos sąsajos vadovo, jis įdėjo nuorodą į grupę, "WeChat" neseniai buvo perkaitęs, aš taip pat smalsiai spustelėjau.
Spustelėkite pranešimų sąsajos vadovą, pamatysime, kad viešosios platformos pranešimų sąsaja duomenų sąveikai naudoja XML. Manipuliavimo duomenimis patogumui paprastai serializuojame ir deserializuojame XML. Serializacija yra objekto būsenos konvertavimo į formatą, kurį galima išlaikyti arba perkelti, procesas. Serializacijos priešingybė yra deserializacija, kuri srautus paverčia objektais. Šie du procesai kartu palengvina duomenų saugojimą ir perdavimą.
Pirmiausia pakalbėkime apie serializaciją, kaip pavyzdį paimkime XML formatą, skirtą atsakyti į grafinius pranešimus, nes šis formatas iš esmės apima visus aukščiau pateiktus pranešimų siuntimo ir pranešimo atsakymus.
Kai <xml><Articles>gauname duomenų atsakymą iš viešosios platformos POST, kad grąžintume išvestį, naudojame XML serializaciją, tai yra, konvertuojame atsakymo duomenų objektą į viešosios platformos pateiktą XML duomenų formatą, kuris yra patogus duomenims perduoti. Serializacija Čia parašiau paprastą pavyzdinį kodą C#. Norėdami gauti nuoseklią eilutę, Tiesioginio rezultato nėra, žinoma, jūsų projekte galite tiesiogiai Response.Output.
Čia minima, kad XML šakninio elemento, sugeneruoto XmlSerializer klasės Serialize metodu, pavadinimas pagal numatytuosius nustatymus yra serializacijos klasės pavadinimas. Kodėl aš jaučiuosi toks liežuvis, kai aš skaitau šį sakinį? Ir aš nenoriu naudoti beprasmio žodžio kaip xml kaip klasės pavadinimas, mes turime pridėti ypatybės žymą į serializacijos klasę [XmlRoot(ElementName = "xml")], kad nurodytume, kad sugeneruotas XML elementas yra pavadintas xml. Jei neįtrauksite šios žymės, jei jūsų serializacijos klasės pavadinimas neatitinka XML šakninio elemento pavadinimo, visada gausite dokumento formato klaidą.
Gavę šakninį elementą, turime išspręsti straipsnių surinkimo mazgo problemą, šiuo metu turime sukurti naują stiprių tipų sąrašą, o kintamasis vadinamas straipsniais viešąja nuosavybe.
XmlArrayItemAttribute yra išvestinis tipas, nurodantis, kad XmlSerializer galima įdėti į nuoseklų masyvą. Sukūrus klasę, derinant ir pažvelgus į ją, iš esmės nėra didelių problemų.
Pakalbėkime apie deserializaciją. Kai paprastas "WeChat" vartotojas siunčia pranešimą į viešąją paskyrą, "WeChat" serveris PASKELBS pranešimą užpildytu URL. Šiuo metu turime deserializuoti gautus duomenis į objektus, kurių mums reikia lengvam valdymui ir saugojimui. Paprastai mes naudojame Request.Form["param"], kad gautume įrašo duomenis, ir daugelis kūrėjų pastebi, kad POST duomenys neturi parametrų, žiūrėdami į sąsajos dokumentaciją, ir jie yra sutrikę ir nežino, kaip gauti duomenis. Čia naudojame Request.InputStream, kad gautume gaunamo HTTP objekto turinį. Norėdami gauti daugiau informacijos, skaitykite šį straipsnį: http://blog.sina.com.cn/s/blog_9fa44b550101ee3r.html
Deserializacija Čia parašiau paprastą kodo pavyzdį C#.
Čia, kadangi tai yra eilutė, kuri tiesiogiai kopijuoja xml pavyzdinius duomenis, kurie atsako į grafinį pranešimą, naudojama Deserialize (TextReader textReader) perkrova, žinoma, projekte galite tiesiogiai naudoti Deserialize (Stream stream) perkrovą.
Jei turite klausimų apie XML serializavimą, skaitykite šį straipsnį MSDN apie XML ir SOAP serializavimą
Aš įdėjau atitinkamą egzemplioriaus kodo failą į github ne XmlSerializerExample
Rašykite skubėdami ir tiesiog pažymėkite. Naktį nevalgiau pakankamai ir dabar pykina. Turiu greitai eiti miegoti. Jei yra klaidų, prašome jas ištaisyti.
Originali nuoroda:
http://imr3.com/tech/weixin-message-api-serialize
|