首页 > 代码库 > 两种读取微信xml消息的方式比较

两种读取微信xml消息的方式比较

直接贴代码和结果。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml;using System.Xml.Serialization;using System.IO;using System.Diagnostics;namespace ConsoleApplication_xml{    [XmlRoot("xml")]    public class WeChatMessage    {        [XmlElement("ToUserName")]        public string ToUserName { get; set; }        [XmlElement("FromUserName")]        public string FromUserName { get; set; }        [XmlElement("CreateTime")]        public int CreateTime { get; set; }        [XmlElement("MsgType")]        public string MsgType { get; set; }        [XmlElement("Content")]        public string Content { get; set; }        [XmlElement("MsgId")]        public long? MsgId { get; set; }    }    public class Program    {        public static T FromXml<T>(Stream stream)        {            var serializer = new XmlSerializer(typeof(T));            return (T)serializer.Deserialize(stream);        }                static void Main(string[] args)        {            string xmlData = http://www.mamicode.com/@"<xml>                                 <ToUserName><![CDATA[toUser]]></ToUserName>                                 <FromUserName><![CDATA[fromUser]]></FromUserName>                                  <CreateTime>1348831860</CreateTime>                                 <MsgType><![CDATA[text]]></MsgType>                                 <Content><![CDATA[this is a test]]></Content>                                 <MsgId>1234567890123456</MsgId>                               </xml>                              ";            // first way            Stopwatch watch1 = new Stopwatch();            watch1.Start();            XmlDocument doc = new XmlDocument();            doc.LoadXml(xmlData);            string fromUser = doc.GetElementsByTagName("FromUserName")[0].InnerText;             string toUser = doc.GetElementsByTagName("ToUserName")[0].InnerText;            string msgType = doc.GetElementsByTagName("MsgType")[0].InnerText;            string content = doc.GetElementsByTagName("Content")[0].InnerText;            string createTime = doc.GetElementsByTagName("CreateTime")[0].InnerText;            string msgId = doc.GetElementsByTagName("MsgId")[0].InnerText;            watch1.Stop();            Console.WriteLine("first way, time = {0}", watch1.Elapsed);            Console.WriteLine("fromUser = {0}, toUser = {1}, msgType = {2}, content = {3}, createTime = {4}, msgId = {5}",                               fromUser, toUser, msgType, content, createTime, msgId);            Console.WriteLine("======");            // second way            Stopwatch watch2 = new Stopwatch();            watch2.Start();            byte[] byteArray = Encoding.UTF8.GetBytes(xmlData);            MemoryStream stream = new MemoryStream(byteArray);            Stopwatch watch3 = new Stopwatch();            watch3.Start();            WeChatMessage message = FromXml<WeChatMessage>(stream);            watch3.Stop();            watch2.Stop();            Console.WriteLine("second way, total time = {0}", watch2.Elapsed);            Console.WriteLine("second way, stream time = {0}", watch3.Elapsed);            Console.WriteLine("fromUser = {0}, toUser = {1}, msgType = {2}, content = {3}, createTime = {4}, msgId = {5}",                        message.FromUserName, message.ToUserName, message.MsgType, message.Content, message.CreateTime, message.MsgId);            Console.ReadLine();        }    }}

 结果:

first way, time = 00:00:00.0005323fromUser = fromUser, toUser = toUser, msgType = text, content = this is a test,createTime = 1348831860, msgId = 1234567890123456======second way, total time = 00:00:00.1302524second way, stream time = 00:00:00.1302366fromUser = fromUser, toUser = toUser, msgType = text, content = this is a test,createTime = 1348831860, msgId = 1234567890123456