[玩转微信平台]XML的格式化- 如何去掉XML 文档头和命名空间

前言

系统要求能够回复微信用户发过来的文本消息。实现中使用的实体对象进行XML的序列化的方式来实现XML消息。

 

微信平台的回复例子

http://mp.weixin.qq.com/wiki/14/89b871b5466b19b3efa4ada8e577d45e.html#.E5.9B.9E.E5.A4.8D.E6.96.87.E6.9C.AC.E6.B6.88.E6.81.AF

 

这是我测试成功后的例子

 

如果简单使用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-xelement
                ms.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!

时间: 2024-08-02 06:43:23

[玩转微信平台]XML的格式化- 如何去掉XML 文档头和命名空间的相关文章

玩赚全民微商运营系统课程,火人带你玩转微信营销

哪里有人哪里就有商业,哪里就有盈利空间.据第三方统计70%的手机用户开通了个人微信,其年龄涵盖了小学生至老年人,各年龄阶层的人群.截止目前腾讯已拥有4亿的微信用户,7亿的qq用户.消费者才是企业追逐的目标,人的数量决定了财富的数量. 微信营销过程中您是否还在苦恼以下问题: 您企业的公众号是否运营半载粉丝寥寥无几? 您花费近万元打造的微信平台是否从来没有订单? 您的品牌知名度是否通过微信得到了提升? 您的微信平台建设后却不懂得怎么去推广? 如果找不到好的营销解决方案,只会造成重复走弯路.. 赶快来

【玩转微信公众平台之九】 第一个功能:消息自己主动回复

这篇就来实现我们微信公众平台的第一个功能:消息自己主动回复. -------------尽管之前已经通过了前面的开发人员验证,可是我们的微信公众平台仍然不会自己主动回复消息.为什么呢?原因就在于自己主动回复消息的功能并没有"打开".还记得上篇我说过,在wechatCallbackapiTest这个类中有三个函数valid,responseMsg,checkSignature,valid和checkSignature主要是用来验证用的,而responseMsg则是用来回复消息的.以下看下

【玩转微信公众平台之六】 搭建新浪SAE服务器

赶紧接上一篇继续讲. ------本篇将介绍如何搭建 新浪SAE服务器.猛戳 http://sae.sina.com.cn/1.先自己注册一个账号,如果有新浪的账号,微博之类的都可以直接拿来用,授权一下就可以,如下: 2.接下来会让你填写一些安全设置,自己根据要求如实填写就可以了.要注意的是,你设置的安全密码别忘了,原因如下: 看的懂就好,看不懂也罢,我们继续往下走.3.注册的最后一步是 手机绑定 ,将你手机收到的验证码输入进去即可.这些都没啥难度,我就不多说了.注册成功后,点击 我的首页 回到

【玩转微信公众平台之七】 PHP语法简单介绍

经过多篇的努力,我们终于成为了微信公众平台的开发者.但是别高兴的太早,就跟修真小说一样:修炼多年武破虚空,飞升到仙界后本以为成为了天仙即可跳出三界外,不在五行中.可实际到了仙界才发现,成仙只是修行的第一步......没错,成为开发者也才只是第一步,因为现在你的微信公众平台还没有任何功能,说难听点就是小白,说好听点就是白马王子,说可爱点就是小白白,说黄色点就是洗白白,说...----------------要想在微信公众平台添加功能,那就需要写代码:既然说到写代码,那么肯定是要用php(如果用AS

PHP玩转微信公众平台自定义接口

从微信公众平台开通自定义回复后,就一直在关注微信接口这一块,很想用自定义回复这块做个站长工具的查询,例如PR查询,备案查询等,输入网址信息,就能自动获取PR,获取备案信息,应该是一个不错的想法.不过以前一直不支持自定义API,只能是一些固定的信息回复.最近微信公众平台终于开放第三方接口了,也就是说,可以根据用户提交的信息,来自定义回复内容,非常方便. 看到了微信的自定义第三方接口的强大后,下面我们来讲讲怎么实现自定义回复. 首先我们进入第三方接口的页面进行注册,地址:http://mp.weix

【玩转微信公众平台之十】 图文消息回复讲解

讲解目录 <保卫战:异形入侵>游戏开发    1 第一讲   游戏演示和资源的介绍    1 第二讲  "异形"怪物的实现    1 第三讲  "异形"怪物生命值的体现    9 第四讲  "异形"怪物死后处理    12 第五讲  玩家的制作    15 第六讲  玩家的行走控制(键盘)    16 第七讲  武器的切换(鼠标)     16 第八讲  摄像头的变化(鼠标)    19 第九讲  子弹预制体和特效的制作    20

【玩转微信公众平台之五】 进军开发者模式!冲啊!

终于要进军高大上的开发者模式了,想想都有点小激动~~ ----------------点击 功能--高级功能 出现如下界面. 先进入编辑模式,将该模式关掉,然后再进入开发者模式,会出现如下界面:.            这时候会提示我们还不是开发者,接下来点击 成为开发者 按钮,会出现接口配置信息: 我们需要在配置信息填入URL和Token.看到这里有些小伙伴可能就懵了,什么是URL和Token?如果你不知道他们是什么,那是正常的!如果随便一个人都知道,那我们这些真正的开发者还混什么!这么高端大

【玩转微信公众平台之三】 基本操作

上一篇已经介绍了公众号的注册流程,这一篇就讲下微信公众平台首页的一些基本功能使用. --------------------登录微信公众平台后,可以看到这样一系列菜单:            这些菜单的功能大家自己可以去点开看看,很容易操作.接下来主要挑一些重点讲: 1.生成公众号二维码 点击 设置--账号信息,进入设置界面,看最底下有一个二维码,点击更多尺寸下载你所需要的二维码即可.注意,全都是高清无码的呦... 2.创建素材 何为素材,说到底也就是资料库啦,就是将你常用的图片.视频.语音.图

【玩转微信公众平台之四】 编辑模式的使用

Unity 3D本地发布WebPlayer版时遇到提示:"Failed to download data file"(如上图),遇到这个问题就是指Web服务器并没有支持这种*.unity3d文件类型.需要做的是在Web服务器中添加MIME类型: 1.IIS 7 及以上版本: 在功能视图的IIS选项卡中: 双击打开MIME,选择"添加": .unity3d application/octet-stream 2.IIS6版本: 右击计算机名,选择属性,找到MIME类型,