zoukankan      html  css  js  c++  java
  • xml转换为对象 微信接口

        public sealed class XMLSerilizable
        {
            /// <summary>
            /// XML转换为对象
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="xml"></param>
            /// <returns></returns>
            public static T XMLToObject<T>(string xml) where T : new()
            {
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xml);
                XmlNode root = doc.FirstChild;
    
                Dictionary<string, object> table = new Dictionary<string, object>();
                foreach (XmlNode v in root.ChildNodes)
                {
                    table.Add(v.Name, GetValue(v));
                }
    
                return DicToObject<T>(table); //new RequestText(table);
            }
    
            /// <summary>  
            /// 字典类型转化为对象  
            /// </summary>  
            /// <param name="dic"></param>  
            /// <returns></returns>  
            private static T DicToObject<T>(Dictionary<string, object> dic) where T : new()
            {
                var md = new T();
                DicToObject(md, dic);
                return md;
            }
    
            /// <summary>
            /// Dictionary填充对象
            /// </summary>
            /// <param name="md"></param>
            /// <param name="dic"></param>
            private static void DicToObject(object md, System.Collections.IDictionary dic)
            {
                foreach (var filed in dic.Keys)
                {
                    BindingFlags flag = BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance;
    
                    try
                    {
                        var value = dic[filed];
    
                        if (value is System.Collections.IDictionary)
                        {
                            Type ct = md.GetType().GetProperty(filed + "", flag).PropertyType;
                            object o = Activator.CreateInstance(ct);
                            DicToObject(o, value as System.Collections.IDictionary);
                            md.GetType().GetProperty(filed + "", flag).SetValue(md, o, null);
                        }
                        else
                            md.GetType().GetProperty(filed + "", flag).SetValue(md, value, null);
                    }
                    catch (Exception e)
                    {
    
                    }
                }
                //            return md;
            }
    
            /// <summary>
            /// 获得节点值
            /// </summary>
            /// <param name="node"></param>
            /// <returns></returns>
            private static object GetValue(XmlNode node)
            {
                if (node.HasChildNodes)
                {
                    // <MsgType><![CDATA[text]]></MsgType> 这种结构 node.ChildNodes.Count==1
                    if (node.ChildNodes.Count == 1 && node.ChildNodes[0].NodeType != XmlNodeType.Element)
                    {
                        return node.InnerText;
                    }
                    else
                    {
                        Dictionary<string, object> table = new Dictionary<string, object>();
                        foreach (XmlNode n in node.ChildNodes)
                        {
                            table.Add(n.Name, GetValue(n));
                        }
                        return table;
                    }
                }
                return node.InnerText;
            }
    
        }
    慎于行,敏于思!GGGGGG
  • 相关阅读:
    二叉树(8)----第一个二叉树K层节点和二进制部分K叶节点层,递归和非递归
    android文件缓存,并SD卡创建目录未能解决和bitmap内存溢出解决
    Ubuntu Ruby On Rails安装和配置
    Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 循环队列
    ORACLE经常使用的命令
    增加 Java 有几个好习惯表现
    HTML5学习资源
    FFT 的C 语言
    MongoDB在window下的安装
    白话经典算法系列之七 堆与堆排序
  • 原文地址:https://www.cnblogs.com/GarsonZhang/p/6928298.html
Copyright © 2011-2022 走看看