博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XML 和 List 互转类
阅读量:5892 次
发布时间:2019-06-19

本文共 3821 字,大约阅读时间需要 12 分钟。

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 

转载于:https://www.cnblogs.com/kevinGao/p/4188723.html

你可能感兴趣的文章
【算法之美】logn 时间复杂度求解两个有序数组的中位数
查看>>
树的总结--树的性质(树的深度) leetcode
查看>>
docker环境搭建ELK
查看>>
webpack sourcemap 选项多种模式的一些解释
查看>>
document.createElement()的用法
查看>>
MySQL 数据库怎样把一个表的数据插入到另一个表
查看>>
HTTP协议及其POST与GET操作差异 & C#中如何使用POST、GET等
查看>>
nginx正则笔记
查看>>
delphi实现数字的倒计时
查看>>
在 IIS 下添加 FLV 类型文件的支持
查看>>
java线程学习3——线程的停止
查看>>
穿过任意防火墙NAT的远程控制软件TeamViewer
查看>>
PIX防火墙基本特性:失效处理机制和冗余-原理与实验
查看>>
域环境内部署Bginfo来统计用户计算机信息
查看>>
nagios短信报警(飞信fetion20080522004-linrh4)
查看>>
【Android游戏开发之六】在SurfaceView中添加组件!!!!并且相互交互数据!!!!...
查看>>
创建实体类使用Hibernate
查看>>
异常处理汇总-开发工具
查看>>
[LeetCode] Excel Sheet Column Number 求Excel表列序号
查看>>
通过浏览器直接打开Android应用程序
查看>>