直接贴代码和结果。
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 = @"<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.0005323
fromUser = fromUser, toUser = toUser, msgType = text, content = this is a test,
createTime = 1348831860, msgId = 1234567890123456
======
second way, total time = 00:00:00.1302524
second way, stream time = 00:00:00.1302366
fromUser = fromUser, toUser = toUser, msgType = text, content = this is a test,
createTime = 1348831860, msgId = 1234567890123456