代码片段一
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
namespace WxXmlSerializer
{
class Program
{
static void Main(string[] args)
{
string xml = @"<xml><ToUserName><![CDATA[sdfasdc]]></ToUserName>
<FromUserName><![CDATA[sdfsdgsdc - dgdss - HONkdadf]]></FromUserName>
<CreateTime>1604279129</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[qrscene_1|1|123456789]]></EventKey>
<Ticket><![CDATA[gQE98jwAAAdsafadsfdchgruyAEQTYQRHFSDATY AyV3Y1dEJFSS05WlUxMDAwMHcwNzcAAgSy3pxfAwQAAAAA]]></Ticket>
</xml>";
var message = WXXmlSerializer.Deserialize<WXEventScanMessage>(xml);
}
}
public static class WXXmlSerializer
{
public static async Task<string> SerializeAsync<T>(T obj)
{
var serializer = new XmlSerializer(typeof(T));
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
settings.Encoding = Encoding.UTF8;
settings.NamespaceHandling = NamespaceHandling.OmitDuplicates;
using (Stream stream = new MemoryStream())
{
using (var writer = XmlWriter.Create(stream, settings))
{
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
serializer.Serialize(writer, obj, namespaces);
return await stream.ReadToStringAsync();
}
}
}
public static T Deserialize<T>(string xml)
{
var serializer = new XmlSerializer(typeof(T));
using (var reader = new StringReader(xml))
{
return (T)serializer.Deserialize(reader);
}
}
}
public static partial class Extention
{
/// <summary>
/// 将流读为字符串
/// 注:默认使用UTF-8编码
/// </summary>
/// <param name="stream">流</param>
/// <param name="encoding">指定编码</param>
/// <returns></returns>
public static async Task<string> ReadToStringAsync(this Stream stream, Encoding encoding = null)
{
if (encoding == null)
encoding = Encoding.UTF8;
if (stream.CanSeek)
{
stream.Seek(0, SeekOrigin.Begin);
}
string resStr = string.Empty;
resStr = await new StreamReader(stream, encoding).ReadToEndAsync();
if (stream.CanSeek)
{
stream.Seek(0, SeekOrigin.Begin);
}
return resStr;
}
}
}
代码片段二
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
namespace WxXmlSerializer
{
[XmlRoot("xml")]
public class WXEventScanMessage
{
[XmlIgnore]
public string ToUserName { get; set; }
[XmlElement("ToUserName")]
public XmlCDataSection ToUserNameCData
{
get
{
return new XmlDocument().CreateCDataSection(ToUserName);
}
set
{
ToUserName = value.Value;
}
}
[XmlIgnore]
public string FromUserName { get; set; }
[XmlElement("FromUserName")]
public XmlCDataSection FromUserNameCData
{
get
{
return new XmlDocument().CreateCDataSection(FromUserName);
}
set
{
FromUserName = value.Value;
}
}
[XmlElement("CreateTime")]
public long CreateTime { get; set; }
[XmlIgnore]
public string MsgType { get; set; }
[XmlElement("MsgType")]
public XmlCDataSection MsgTypeCData
{
get
{
return new XmlDocument().CreateCDataSection(MsgType);
}
set
{
MsgType = value.Value;
}
}
[XmlIgnore]
public string Event { get; set; }
[XmlElement("Event")]
public XmlCDataSection EventCData
{
get
{
return new XmlDocument().CreateCDataSection(Event);
}
set
{
Event = value.Value;
}
}
[XmlIgnore]
public string EventKey { get; set; }
[XmlElement("EventKey")]
public XmlCDataSection EventKeyCData
{
get
{
return new XmlDocument().CreateCDataSection(EventKey);
}
set
{
EventKey = value.Value;
}
}
[XmlIgnore]
public string Ticket { get; set; }
[XmlElement("Ticket")]
public XmlCDataSection TicketCData
{
get
{
return new XmlDocument().CreateCDataSection(Ticket);
}
set
{
Ticket = value.Value;
}
}
}
}