[玩转微信平台]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 WebC{{public class WebChatXmlMessageSeri{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) /{{{{alizer : ISerializer
});// 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.P}}new XmlQual
}ifiedName(string.Empty, string.Empty) // Default Namespace
</pre>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;trysr = new StringReader(xmlStr);//默认用UTF-8打开文件recoveryObject = xmS.Deserialize(sr);catch (Exception ex)throw ex;finallyif (sr != null)sr.Close();return (T)recoveryObject;}ms.Position = 0;
xs.Serialize(xwr, obj, namespaces);
重点我标记如下:
Enjoy it!
[玩转微信平台]XML的格式化- 如何去掉XML 文档头和命名空间
原文:http://www.cnblogs.com/king_astar/p/4633518.html