Hiljuti soovis vend Shuang proovida WeChati avaliku konto arendajarežiimi ja kandideeris WeChati avalikul platvormil kontole. Siis läksin vaatama avatud platvormi liidese juhendit, ta pani gruppi lingi, WeChat on viimasel ajal üle kuumenenud, ka mina klõpsasin uudishimulikult.
Klõpsa sõnumiliidese juhendil, näeme, et avaliku platvormi sõnumiliides kasutab andmesuhtluseks XML-i. Andmete manipuleerimise mugavuse huvides seriaaliseerime ja deserialiseerime XML-i tavaliselt. Serialiseerimine on protsess, mille käigus objekti olek muudetakse formaadiks, mida saab säilitada või üle kanda. Serialiseerimise vastand on deserialiseerimine, mis muudab vood objektideks. Need kaks protsessi teevad andmete salvestamise ja edastamise lihtsaks.
Räägime esmalt serialiseerimisest, võtame näiteks XML-formaadi, kus vastatakse graafilistele sõnumitele, sest see formaat hõlmab põhimõtteliselt kõiki eelmainitud sõnumi push'i ja sõnumi vastuse vorme.
Kui <xml><Articles>saame avaliku platvormi POST andmevastuse väljundi tagastamiseks, kasutame XML-serialiseerimist, st vastusandmete objekti teisendamist avaliku platvormi pakutavaks XML-andmevorminguks, mis on andmeedastuseks mugav. Serialiseerimine Siin kirjutasin lihtsa näidiskoodi C#-s. Serialiseeritud stringi saamiseks Otse väljundit pole, loomulikult saab projektis otse Response.Output'i kasutada.
Siin mainitakse, et XML-juurelemendi nimi, mis genereeritakse XmlSerializer klassi Serialize'i meetodi abil, on vaikimisi serialiseerimisklassi nimi. Miks ma tunnen end selle lause lugemisel nii segaduses? Ja ma ei taha kasutada mõttetut sõna nagu xml klassinimena, peame lisama serialiseerimisklassile omadusmärgi [XmlRoot(ElementName = "xml")], et täpsustada, et genereeritud XML-element kannab nime xml. Kui sa seda silti ei lisa, kui sinu serialiseerimisklassi nimi ei vasta XML-i juurelemendi nimele, saad alati dokumendi vorminduse vea.
Pärast juurelemendi saamist peame lahendama artiklite kogumissõlme probleemi, praegu peame looma uue tugevate tüüpide nimekirja ning muutujat nimetatakse artiklite avalikuks varaks.
XmlArrayItemAttribute on tuletatud tüüp, mis määrab, et XmlSerializer saab paigutada serialiseeritud massiivi. Pärast klassi loomist, silumist ja vaatamist pole suurt probleemi.
Räägime deserialiseerimisest. Kui tavaline WeChati kasutaja saadab sõnumi avalikule kontole, POSTITAB WeChati server sõnumi täidetud URL-ile. Praegu peame vastuvõetud andmed deserialiseerima objektideks, mida vajame lihtsaks kasutamiseks ja salvestamiseks. Tavaliselt kasutame Request.Form["param"], et saada Post'i andmeid, ja paljud arendajad leiavad, et POST-i andmetel pole liidese dokumentatsiooni vaadates parameetreid, nad on segaduses ega tea, kuidas andmeid saada. Siin kasutame Request.InputStreami, et saada sissetuleva HTTP entiteedi keha sisu. Lisateabe saamiseks vaadake palun seda artiklit: http://blog.sina.com.cn/s/blog_9fa44b550101ee3r.html
Deserialiseerimine Siin kirjutasin lihtsa näidiskoodi C#-s.
Siin, kuna tegemist on stringiga, mis otse kopeerib xml näidisandmed, mis reageerivad graafilisele sõnumile, kasutatakse Deserialize'i (TextReader textReader) ülekoormust, loomulikult saab projektis otse kasutada Deserialize'i (Stream stream) ülekoormust.
Küsimuste korral XML-serialiseerimise kohta vaata MSDN-i artiklit XML-i ja SOAP-serialiseerimise kohta
Olen pannud vastava instantsi koodifaili gitHubi aadressile XmlSerializerExample
Kirjuta kiiresti ja lihtsalt tee märk. Ma ei söönud öösel piisavalt ja nüüd tunnen iiveldust. Ma pean kiiresti magama minema. Kui on vigu, palun parandage need.
Originaallink:
http://imr3.com/tech/weixin-message-api-serialize
|