Nemrég Shuang testvér ki akarta próbálni a WeChat nyilvános fiók fejlesztői módját, és jelentkezett egy fiókra a WeChat nyilvános platformján. Aztán megnéztem a nyílt platform felületi útmutatóját, betett egy linket a csoportba, a WeChat mostanában túlmelegedett, kíváncsian rákattintottam is.
Kattints az üzenetinterfész útmutatójára, láthatjuk, hogy a nyilvános platform üzenetfelülete XML-t használ az adatinterakcióhoz. Az adatkezelés kényelme érdekében általában az XML-t soriálissá és deserializáljuk. A serializáció az a folyamat, amely során egy objektum állapotát olyan formátummá alakítják, amelyet fenntartható vagy áthelyezhető. A serializáció ellentéte a deserializáció, amely az áramlatokat objektumokká alakítja. Ez a két folyamat együtt megkönnyíti az adatok tárolását és átvitelét.
Először a serializációról beszéljünk, vegyük például a grafikus üzenetekre válaszolás XML formátumát, mert ez a formátum lényegében magában foglalja az összes fenti üzenet push-t és üzenetválaszt.
Amikor <xml><Articles>megkapjuk az adatválaszt a nyilvános platformról, a POST-tól, hogy visszaadjuk a kimenetet, XML serializációt használunk, vagyis a válaszadat objektumot a nyilvános platform által biztosított XML adatformátumba alakítjuk, ami kényelmes az adatátvitelhez. Serializáció Itt írtam egy egyszerű példakódot C#-ban. A serializált string megszerzéséhez, Nincs közvetlen kimenet, természetesen a projektedben közvetlenül is használhatod a Response.Output-ot.
Itt említik, hogy az XmlSerializer osztály Serialize módszerével generált XML gyökérelem neve alapértelmezés szerint a serializációs osztály neve. Miért érzem magam ennyire eltorzultnak, amikor ezt a mondatot olvasom? És nem akarok értelmetlen szót, mint az xml osztálynévként használni, szükségünk van egy tulajdonságcímkét hozzáadni a serializációs osztályhoz [XmlRoot(ElementName = "xml")], hogy megadjuk, a generált XML elem neve xml. Ha nem adod hozzá ezt a címkét, és ha a sorozatolási osztály neve nem egyezik az XML gyökérelem nevével, akkor mindig dokumentumformátumi hibát kapsz.
A gyökérelem megszerzése után meg kell oldanunk a Cikkek gyűjteménycsomópontjának problémáját, ekkor új erős típusok listát kell létrehoznunk, és a változót Cikkek köztulajdonnak hívják.
Az XmlArrayItemAttribute egy levezetett típus, amely előírja, hogy az XmlSerializer sorozatos tömbbe is helyezhető. Miután létrehoztam az osztályt, hibáztatta és megnézte, gyakorlatilag nincs nagy probléma.
Beszéljünk a deserializációról. Amikor egy átlagos WeChat felhasználó üzenetet küld a nyilvános fióknak, a WeChat szerver KÖZZÉTESZI az üzenetet a kitöltött URL-re. Jelenleg a befogadott adatokat deserializálni kell azokba az objektumokba, amelyekre szükségünk van az egyszerű üzemeltetés és tárolás érdekében. Általában az Request.Form["param"] segítségével megszerezzük a Post adatait, és sok fejlesztő azt tapasztalja, hogy a POST adatainak nincsenek paraméterei az interfész dokumentációjában, összezavarodnak, és nem tudják, hogyan szerezzék meg az adatokat. Itt az Request.InputStream segítségével megszerezzük a bejövő HTTP entitás testének tartalmát. További információért kérjük, tekintse meg ezt a cikket: http://blog.sina.com.cn/s/blog_9fa44b550101ee3r.html
Deserializáció Itt írtam egy egyszerű példakódot C#-ban.
Itt, mivel ez egy string, amely közvetlenül másolja a grafikus üzenetre válaszoló xml mintaadatokat, a Deserialize (TextReader textReader) túlterhelését használják, természetesen közvetlenül is használhatod a Deserialize (Stream stream) túlterhelését a projektben.
Az XML serializációval kapcsolatos kérdésekért lásd ezt az MSDN cikket az XML-ről és a SOAP serializációról
A releváns instance kódfájlt a githubra tettem az XmlSerializerExample címen
Írj sietve, és egyszerűen hagyj jelet. Este nem ettem eleget, most pedig hányingerem van. Gyorsan le kell feküdnöm. Ha van hibá, kérlek, javítsd ki.
Eredeti link:
http://imr3.com/tech/weixin-message-api-serialize
|