Recientemente, el hermano Shuang quiso probar el modo desarrollador de la cuenta pública de WeChat, y solicitó una cuenta en la plataforma pública de WeChat. Luego fui a ver la guía de la interfaz de la plataforma abierta, puso un enlace en el grupo, WeChat se ha sobrecalentado últimamente, también hice clic con curiosidad.
Haz clic en la guía de la interfaz de mensajes, podemos ver que la interfaz de mensajes de la plataforma pública usa XML para la interacción de datos. Por comodidad de la manipulación de datos, normalmente serializamos y deserializamos XML. La serialización es el proceso de convertir el estado de un objeto en un formato que puede mantenerse o transferirse. El opuesto a la serialización es la deserialización, que convierte flujos en objetos. Estos dos procesos se combinan para facilitar el almacenamiento y la transferencia de datos.
Hablemos primero de la serialización, tomemos como ejemplo el formato XML de responder a mensajes gráficos, porque este formato básicamente incluye todo el envío y respuesta de mensajes anteriores.
Cuando <xml><Articles>recibimos la respuesta de datos de la plataforma pública POST para devolver la salida, usamos serialización XML, es decir, para convertir el objeto de datos de respuesta al formato de datos XML proporcionado por la plataforma pública, que es conveniente para la transmisión de datos. Serialización Aquí escribí un código de ejemplo sencillo en C#. Para obtener la cadena serializada, No hay salida directa, por supuesto que en tu proyecto puedes hacer un Response.Output directo.
Aquí se menciona que el nombre del elemento raíz XML generado por el método Serialize de la clase XmlSerializer es el nombre de la clase de serialización. ¿Por qué me siento tan retorcido la lengua al leer esta frase? Y no quiero usar una palabra sin sentido como xml como nombre de clase, necesitamos añadir una etiqueta de propiedad a la clase de serialización [XmlRoot(ElementName = "xml")] para especificar que el elemento XML generado se llama xml. Si no añades esta etiqueta, si el nombre de tu clase de serialización no corresponde al nombre raíz del elemento XML, siempre obtendrás un error de formato de documento.
Después de obtener el elemento raíz, necesitamos resolver el problema del nodo de colección de Artículos; en este momento necesitamos crear una nueva lista de tipos fuertes, y la variable se llama propiedad pública de Artículos.
XmlArrayItemAttribute es un tipo derivado que especifica que el XmlSerializer puede colocarse en un array serializado. Después de crear la clase, depurarla y revisarla, básicamente no hay ningún gran problema.
Hablemos de la deserialización. Cuando un usuario normal de WeChat envía un mensaje a la cuenta pública, el servidor de WeChat PUBLICARÁ el mensaje en la URL completada. En este momento, necesitamos deserializar los datos recibidos en los objetos que necesitamos para facilitar la operación y almacenamiento. Normalmente usamos Request.Form["param"] para obtener los datos del Post, y muchos desarrolladores descubren que los datos de POST no tienen parámetros al mirar la documentación de la interfaz, y están confundidos y no saben cómo obtener los datos. Aquí usamos Request.InputStream para obtener el contenido del cuerpo de la entidad HTTP entrante. Para más información, consulte este artículo: http://blog.sina.com.cn/s/blog_9fa44b550101ee3r.html
Deserialización Aquí escribí un código de ejemplo sencillo en C#.
Aquí, como es una cadena que copia directamente los datos de muestra xml que responden al mensaje gráfico, se utiliza la sobrecarga de Deserialize (TextReader textReader), por supuesto, puedes usar directamente la sobrecarga de Deserialize (flujo de flujo) en el proyecto.
Para preguntas sobre la serialización XML, consulte este artículo sobre MSDN acerca de la serialización XML y SOAP
He puesto el archivo de código de instancia relevante en github en XmlSerializerExample
Escribe rápido y simplemente deja una marca. No comí lo suficiente por la noche y ahora me siento mareado. Tengo que irme a la cama rápido. Si hay algún error, por favor corrígelo.
Enlace original:
http://imr3.com/tech/weixin-message-api-serialize
|