Son zamanlarda, Kardeş Shuang WeChat kamuya açık hesabının geliştirici modunu denemek istedi ve WeChat kamuya açık platformunda bir hesap için başvurdu. Sonra açık platformun arayüz rehberine baktım, gruba bir bağlantı koydu, WeChat son zamanlarda aşırı ısındı, ben de merakla tıkladım.
Mesaj arayüzü rehberine tıklayınca, kamuya açık platformun mesaj arayüzünün veri etkileşimi için XML kullandığını görebiliriz. Veri işleme kolaylığı için genellikle XML'i seri yapıp serilikten çıkarıyoruz. Serileştirme, bir nesnenin durumunu sürdürülebilecek veya aktarılabilen bir formata dönüştürme sürecidir. Serileştirmenin zıttı, akışları nesnelere dönüştüren deserializasyondur. Bu iki süreç birleşerek veri depolamayı ve aktarmayı kolaylaştırır.
Önce serileştirmeden bahsedelim, grafik mesajlara yanıt verme XML formatını örnek alalım, çünkü bu format temelde yukarıdaki tüm mesaj push'u ve mesaj yanıtını kapsar.
<xml><Articles>Çıktıyı döndürmek için genel platform POST'tan veri yanıtını aldığımızda, yanıt veri nesnesini kamu platformu tarafından sağlanan XML veri formatına dönüştürmek için XML serileştirme kullanıyoruz; bu da veri iletimi için kullanışlıdır. Serileştirme Burada C# ile basit bir örnek kod yazdım. Serileştirilmiş diziyi elde etmek için, Doğrudan çıktı yok, tabii ki projenizde doğrudan Response.Output kullanabilirsiniz.
Burada, XmlSerializer sınıfının Serialize yöntemiyle oluşturulan XML kök elemanının adının varsayılan olarak serileştirme sınıfının adı olduğu belirtilir. Bu cümleyi okurken neden bu kadar şaşırtıcı hissediyorum? Ve xml gibi anlamsız bir kelimeyi sınıf adı olarak kullanmak istemiyorum, serileştirme sınıfına [XmlRoot(ElementName = "xml")] bir özellik etiketi eklememiz gerekiyor ki oluşturulan XML öğesinin xml olarak adlandırıldığını belirtelim. Bu etiketi eklemezseniz, serileştirme sınıf adınız XML'in kök öğe adıyla örtüşmüyorsa, her zaman bir belge formatı hatası alırsınız.
Kök elemanı aldıktan sonra, Makaleler koleksiyon düğümü sorununu çözmemiz gerekiyor, bu sırada yeni bir güçlü tipler listesi oluşturmamız gerekiyor ve değişkene Makaleler kamu mülkiyeti denir.
XmlArrayItemAttribute, XmlSerializer'ın serileştirilmiş bir diziye yerleştirilebileceğini belirten türe bir türdür. Sınıfı oluşturduktan, hata ayıkladıktan ve inceledikten sonra neredeyse hiç büyük bir sorun yok.
Deserileştirmeden bahsedelim. Sıradan bir WeChat kullanıcısı halka açık hesaba mesaj gönderdiğinde, WeChat sunucusu mesajı doldurulmuş URL'ye GÖNDERIR. Şu anda, alınan verileri kolay işlem ve depolama için ihtiyaç duyduğumuz nesnelere seri dışı hale getirmemiz gerekiyor. Genellikle Post'un verilerini almak için Request.Form["param"] kullanıyoruz ve birçok geliştirici arayüz dokümantasyonuna bakıldığında POST verilerinin parametresi olmadığını, kafaları karıştığını ve veriyi nasıl alacaklarını bilmediğini fark ediyor. Burada, gelen HTTP varlık gövdesinin içeriğini almak için Request.InputStream kullanıyoruz. Daha fazla bilgi için lütfen şu makaleye bakınız: http://blog.sina.com.cn/s/blog_9fa44b550101ee3r.html
Deserileştirme Burada C# ile basit bir örnek kod yazdım.
Burada, grafik mesajına yanıt veren xml örnek verilerini doğrudan kopyalayan bir dizedir, Deserialize (TextReader textReader) aşırı yüklenmesi kullanılır; elbette, projede doğrudan Deserialize (Akış akışı) aşırı yüklenmesini kullanabilirsiniz.
XML serileştirme ile ilgili sorular için, MSDN'de XML ve SOAP serileştirme ile ilgili bu makaleye bakabilirsiniz
İlgili örnek kod dosyasını github'a XmlSerializerExample adresine koydum
Aceleyle yaz ve sadece bir iz bırak. Gece yeterince yemedim ve şimdi mide bulantısı hissediyorum. Hızlıca yatmam lazım. Herhangi bir hata varsa, lütfen düzeltin.
Orijinal bağlantı:
http://imr3.com/tech/weixin-message-api-serialize
|