zoukankan      html  css  js  c++  java
  • IList与Xml互相转换

    using System;
    using System.Data;
    using System.Collections.Generic;
    using System.Text;
    using System.Xml;
    using System.Reflection;

    namespace YKSoft.BLL.Utility
    {
    /// <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
    }

    }

  • 相关阅读:
    java基础笔记-类与对象(多态)
    oracle中trim,ltrim,rtrim函数用法
    git stash
    update from select
    oracle 查看主外键约束
    eclipse git 解决冲突
    根据Request获取客户端IP
    简单说说Spring Security 使用(附加验证码登录,自定义认证)
    linux的nohup命令的用法
    Python包管理工具介绍
  • 原文地址:https://www.cnblogs.com/Areas/p/2299577.html
Copyright © 2011-2022 走看看