• C#将XML字符串转换成实体对象,并去除cdata


    <xml><ToUserName><![CDATA[gh_8b13cf658f77]]></ToUserName>
    <FromUserName><![CDATA[oBvnj5v9LlSagr_XjCLChg7acR30]]></FromUserName>
    <CreateTime>1639555238</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[subscribe]]></Event>
    <EventKey><![CDATA[]]></EventKey></xml>
     
    如上xml字符串是关注微信公众时,微信返回的数据
    public static T GetXmlModel<T>(T model, string xmlString) where T : class
    {
                try 
                {
                    XmlDocument xml = new XmlDocument();
                    xml.LoadXml(xmlString);//把xml格式的字符串转为XMLDataDocument对象
                    Dictionary<string, string> xmlDic = new Dictionary<string, string>();
                    XmlNodeList data = xml.DocumentElement.ChildNodes;//得到的是xml对象的节点数组
                    for (int i = 0; i < data.Count; i++)
                    {
                        xmlDic.Add(data.Item(i).LocalName, data.Item(i).InnerText);
                    }
    
                    var m = model.GetType();
                    foreach (PropertyInfo p in m.GetProperties())
                    {
                        string name = p.Name;
                        if (xmlDic.Keys.Contains(name))
                        {
                            string value = xmlDic.Where(x => x.Key == name).FirstOrDefault().Value;
                            p.SetValue(model,
                            string.IsNullOrEmpty(value) ? null : Convert.ChangeType(value, p.PropertyType), null);
                        }
                    }
                    return model;
                }
                catch (Exception ex)
                {
                    return model;
                } 
    }

    调用方法

    var param = new XMLModel();
    string bodyStr=@"<xml><ToUserName><![CDATA[gh_8b13cf658f77]]></ToUserName>
    <FromUserName><![CDATA[oBvnj5v9LlSagr_XjCLChg7acR30]]></FromUserName>
    <CreateTime>1639555238</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[subscribe]]></Event>
    <EventKey><![CDATA[]]></EventKey>";
    var obj=GetModel<XMLModel>(param, bodyStr);

    实体类

    public class XMLModel
        {
            /// <summary>
            /// 
            /// </summary>
            public string FromUserName { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string CreateTime { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string MsgType { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string Event { get; set; }
    
            /// <summary>
            /// 
            /// </summary>
            public string EventKey { get; set; }
    
        }
  • 相关阅读:
    SWOT分析模型
    如果度过迷茫,是多些挫折还是少一些好呢?
    Ext.Net动态构建树TreePanel使用详解
    Ext.Net动态加载菜单执行事件
    通过教练提升领导力了解行为教练在何时无法发挥作用
    Ext.Net\ExtJs弹出消息Alert、MessageBox、Confirm使用详解
    把领导力转化为结果结果导向型领导力
    自由职业,我的半年总结
    关于自由职业的一些想法(采访整理)
    Ext.net文本输入框:Ext.form.TextField属性汇总
  • 原文地址:https://www.cnblogs.com/wangxiaorang/p/15723387.html
Copyright © 2020-2023  润新知