zoukankan      html  css  js  c++  java
  • XML 和 List 互转类

    XML 和 List 互转类


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Xml;

    namespace XmlHelper
    {
        /// <summary>
        
    /// 实体转Xml,Xml转实体类
        
    /// </summary>
        
    /// <typeparam name="T"></typeparam>
        public class XmlHelper<T> where T : new()
        {
            #region 实体类转成Xml
            /// <summary>
            
    /// 对象实例转成xml
            
    /// </summary>
            
    /// <param name="item">对象实例</param>
            
    /// <returns></returns>
            public static string EntityToXml(T item)
            {
                IList<T> items = new List<T>();
                items.Add(item);
                return EntityToXml(items);
            }

            /// <summary>
            
    /// 对象实例集转成xml
            
    /// </summary>
            
    /// <param name="items">对象实例集</param>
            
    /// <returns></returns>
            public static string EntityToXml(IList<T> items)
            {
                //创建XmlDocument文档
                XmlDocument doc = new XmlDocument();
                //创建根元素
                XmlElement root = doc.CreateElement(typeof(T).Name + "s");
                //添加根元素的子元素集
                foreach (T item in items)
                {
                    EntityToXml(doc, root, item);
                }
                //向XmlDocument文档添加根元素
                doc.AppendChild(root);

                return doc.InnerXml;
            }

            private static void EntityToXml(XmlDocument doc, XmlElement root, T item)
            {
                //创建元素
                XmlElement xmlItem = doc.CreateElement(typeof(T).Name);
                //对象的属性集

                System.Reflection.PropertyInfo[] propertyInfo =
                typeof(T).GetProperties(System.Reflection.BindingFlags.Public |
                System.Reflection.BindingFlags.Instance);



                foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)
                {
                    if (pinfo != null)
                    {
                        //对象属性名称
                        string name = pinfo.Name;
                        //对象属性值
                        string value = String.Empty;

                        if (pinfo.GetValue(item, null) != null)
                            value = pinfo.GetValue(item, null).ToString();//获取对象属性值
                        
    //设置元素的属性值
                        xmlItem.SetAttribute(name, value);
                    }
                }
                //向根添加子元素
                root.AppendChild(xmlItem);
            }


            #endregion

            #region Xml转成实体类

            /// <summary>
            
    /// Xml转成对象实例
            
    /// </summary>
            
    /// <param name="xml">xml</param>
            
    /// <returns></returns>
            public static T XmlToEntity(string xml)
            {
                IList<T> items = XmlToEntityList(xml);
                if (items != null && items.Count > 0)
                    return items[0];
                else return default(T);
            }

            /// <summary>
            
    /// Xml转成对象实例集
            
    /// </summary>
            
    /// <param name="xml">xml</param>
            
    /// <returns></returns>
            public static IList<T> XmlToEntityList(string xml)
            {
                XmlDocument doc = new XmlDocument();
                try
                {
                    doc.LoadXml(xml);
                }
                catch
                {
                    return null;
                }
                if (doc.ChildNodes.Count != 1)
                    return null;
                if (doc.ChildNodes[0].Name.ToLower() != typeof(T).Name.ToLower() + "s")
                    return null;

                XmlNode node = doc.ChildNodes[0];

                IList<T> items = new List<T>();

                foreach (XmlNode child in node.ChildNodes)
                {
                    if (child.Name.ToLower() == typeof(T).Name.ToLower())
                        items.Add(XmlNodeToEntity(child));
                }

                return items;
            }

            private static T XmlNodeToEntity(XmlNode node)
            {
                T item = new T();

                if (node.NodeType == XmlNodeType.Element)
                {
                    XmlElement element = (XmlElement)node;

                    System.Reflection.PropertyInfo[] propertyInfo =
                typeof(T).GetProperties(System.Reflection.BindingFlags.Public |
                System.Reflection.BindingFlags.Instance);

                    foreach (XmlAttribute attr in element.Attributes)
                    {
                        string attrName = attr.Name.ToLower();
                        string attrValue = attr.Value.ToString();
                        foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)
                        {
                            if (pinfo != null)
                            {
                                string name = pinfo.Name.ToLower();
                                Type dbType = pinfo.PropertyType;
                                if (name == attrName)
                                {
                                    if (String.IsNullOrEmpty(attrValue))
                                        continue;
                                    switch (dbType.ToString())
                                    {
                                        case "System.Int32":
                                            pinfo.SetValue(item, Convert.ToInt32(attrValue), null);
                                            break;
                                        case "System.Boolean":
                                            pinfo.SetValue(item, Convert.ToBoolean(attrValue), null);
                                            break;
                                        case "System.DateTime":
                                            pinfo.SetValue(item, Convert.ToDateTime(attrValue), null);
                                            break;
                                        case "System.Decimal":
                                            pinfo.SetValue(item, Convert.ToDecimal(attrValue), null);
                                            break;
                                        case "System.Double":
                                            pinfo.SetValue(item, Convert.ToDouble(attrValue), null);
                                            break;
                                        default:
                                            pinfo.SetValue(item, attrValue, null);
                                            break;
                                    }
                                    continue;
                                }
                            }
                        }
                    }
                }
                return item;
            }

            #endregion
        }

    XML转List

    List转XML

    Model转XML

    XML转Model 

  • 相关阅读:
    HDU 1176 免费馅饼(DP)
    微通道的兵锋 阿里将血腥
    head first c&lt;11&gt;在根据网络编程
    ZOJ 3795 Grouping(Tarjan收缩点+DAG)
    【设计和算法分析】3、二进制搜索
    杨:联想的创新将成为打造最酷的助推力的重要器件
    android 如何将电话簿SDN数字和其他普通的数字混合在一起?
    redhat6.3已安装was6.1你可以不弹出安装程序
    Android属于查询执行情况的电话号码
    table在 点击线条颜色
  • 原文地址:https://www.cnblogs.com/kevinGao/p/4188723.html
Copyright © 2011-2022 走看看