微信公众号关注事件xml序列化

代码片段一

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;
            }
        }

    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值