[玩转微信平台]XML的格式化- 如何去掉XML 文档头和命名空间
前言
系统要求能够回复微信用户发过来的文本消息。实现中使用的实体对象进行XML的序列化的方式来实现XML消息。
微信平台的回复例子

这是我测试成功后的例子

如果简单使用xml serializer会包括两个部分,就是下面第一行和第二行
<?xml version="1.0" encoding="utf-16"?><xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><FromUserName>test</FromUserName><CreateTime>0</CreateTime><MsgId>0</MsgId></xml>
由于下面的两行发送给微信服务器,微信服务器会报错,因此必须要移除第一行和去掉xmlns 命名空间的字符串
<?xml version="1.0" encoding="utf-16"?><xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
最开始想简单用字串替换的方式,后来还是老老实实的用标准方法来做。给出一个完整的例子吧,拷贝吧!
public class WebChatXmlMessageSerializer : ISerializer{public string SerializeToXML(Object obj){string outXML = string.Empty;if (obj == null)return outXML;XmlSerializer xs = new XmlSerializer(obj.GetType(),new XmlRootAttribute("xml"));//namsepaces is emty//to remove xmlns <xml xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces(new XmlQualifiedName[] {new XmlQualifiedName(string.Empty, string.Empty) // Default Namespace});// I'll use a MemoryStream as my backing store.using (MemoryStream ms = new MemoryStream()){// This is extra! If you want to change the settings for the XmlSerializer, you have to create// a separate XmlWriterSettings object and use the XmlTextWriter.Create(...) factory method.// So, in this case, I want to omit the XML declaration.XmlWriterSettings xws = new XmlWriterSettings();xws.OmitXmlDeclaration = true;xws.Encoding = Encoding.UTF8; // This is probably the default//equal writer.Formatting = Formatting.Indented;xws.Indent = true;var xwr = XmlTextWriter.Create(ms, xws);// remove <?xml header//http://stackoverflow.com/questions/7913798/xmlserializer-to-xelementms.Position = 0;xs.Serialize(xwr, obj, namespaces);outXML = System.Text.Encoding.UTF8.GetString(ms.ToArray());}return outXML;}public T DeSeriralze<T>(string xmlStr){XmlSerializer xmS = new XmlSerializer(typeof(T));object recoveryObject = null;StringReader sr = null;try{sr = new StringReader(xmlStr);//默认用UTF-8打开文件recoveryObject = xmS.Deserialize(sr);}catch (Exception ex){throw ex;}finally{if (sr != null)sr.Close();}return (T)recoveryObject;}}
重点我标记如下:

Enjoy it!
[玩转微信平台]XML的格式化- 如何去掉XML 文档头和命名空间的更多相关文章
- PHP玩转微信公众平台自定义接口
从微信公众平台开通自定义回复后,就一直在关注微信接口这一块,很想用自定义回复这块做个站长工具的查询,例如PR查询,备案查询等,输入网址信息,就能自动获取PR,获取备案信息,应该是一个不错的想法.不过以 ...
- 微信平台ASPX高级定制开发(一):如何使用C#建立响应微信接入和自动回复的代码
微信平台不解释了,如果不了解的百度一下下,如果不会用微信,请自宫,光盘重启电脑,打开CMD输入Format C:.网上有很多针对企业级的高级定制ASPX开发,写得草草了事,很多男人干事都草草了事,这可 ...
- 微信平台接入Web页面功能接口(C#)
微信平台接入web页面功能接口 今年因工作需要,通过微信平台接入公司的Wap页面,回忆下,记录内容,方面以后使用. 1.成为开发者后,你才可以使用公众平台的开发功能.需要填写URL和ToKen,接口配 ...
- java微信平台,发源码
最近写了一个微信平台的架构,采用servlet + spring3.0 + hibernate4.1.整体架构由我负责建设,我尽可能的把业务模块分出来.趁着刚搭好的框架,留着这版.代码是大部份都由其他 ...
- 玩转微信2次开发1_交互通信api.php(微擎版)
在2次开发中,涉及到比较多的也比较繁琐的就是服务器和微信服务器的交互 用户在公众号里操作回复关键词都会让微信服务器和开发者的服务器进行交互 用户一旦关注了某某公众号--微信后台会去查询该公众号是否连接 ...
- O2O外卖玩众包 开放平台难解标准之痛
开放平台难解标准之痛" title="O2O外卖玩众包 开放平台难解标准之痛"> 有一种怪现象一直是国内互联网企业摆脱不了的附骨之疽--不管规模大小,总是削尖了脑 ...
- 基于ThinkPHP3的微信平台开发_1
微信公众平台是个好东西,具体的就不说了,我直接说技术>_< 下图为目录结构一览: 微信开发 - 文件目录结构 平台功能: 此次开发的平台是面向多微信公众号.微信多公众号主(下面简称号主)的 ...
- ios升级<注:来着微信平台>
<来着微信平台> http://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=2709545194&idx=1&sn ...
- 微信平台上遇到的bug
做微信平台遇到的bug,没有什么方法修改,至今只是避免出现,还未解决 1.header的position:fixed定位:如果整个页面的高度不足屏幕高度时,安卓部分手机header与title之间会有 ...
随机推荐
- C# async await 学习笔记2
C# async await 学习笔记1(http://www.cnblogs.com/siso/p/3691059.html) 提到了ThreadId是一样的,突然想到在WinForm中,非UI线程 ...
- SPOJ ONEZERO(搜索)
搜索的好题,,,, 摘自题解: 题意: 给一个数n,求n 的最小的倍数,满足它的10进制 表示中每一位不是0就是1. 思路: 用f(x)表示被n整除取模后的最小数,那么从0开始,每次往后添0或者1,如 ...
- 导航VC的左右item代码
代码控制左右item: UIButton *btnCancel = [UIButton buttonWithType:UIButtonTypeCustom]; btnCancel.frame= ...
- java知识点--重写与重载
重载(Overload): (1)方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载Overloading是一个类中多态性的一种表现. ...
- C#常用IO流与读写文件
.文件系统 ()文件系统类的介绍 文件操作类大都在System.IO命名空间里.FileSystemInfo类是任何文件系统类的基类:FileInfo与File表示文件系统中的文件:Directory ...
- 学习WPF——WPF布局——了解布局容器
WPF布局工作内部原理 WPF渲染布局时主要执行了两个工作:测量和排列 测量阶段,容器遍历所有子元素,并询问子元素所期望的尺寸 排列阶段,容器在合适的位置放置子元素,并设置元素的最终尺寸 这是一个递归 ...
- Android开发学习总结(五)——Android应用目录结构分析
一.手动创建android项目 手动创建一个Android项目,命名为HelloWorld,命令如下: android create project -n HelloWorld -t -p E:/An ...
- 03-Vue入门系列之Vue列表渲染及条件渲染实战
3.1. 条件渲染 有时候我们要根据数据的情况,决定标签是否进行显示或者有其他动作.最常见的就是,表格渲染的时候,如果表格没有数据,就显示无数据.如果有数据就显示表格数据. Vue帮我们提供了一个v- ...
- oracle数据库中varchar2陷阱
oracle数据库相信大家都比较熟悉,数据库中有一种非常常用的数据类型:字符串型. 对应该类型,在oracle中有三种比较常用的类型:varchar2(byte).varchar2(char).nva ...
- java继承与多态-3个小题
1.(1)编写一个接口ShapePara,要求: 接口中的方法: int getArea():获得图形的面积.int getCircumference():获得图形的周长 (2)编写一个圆类Circl ...