博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实体集合和实体转换成相应的string、XDocument、XElement、XDocument
阅读量:4455 次
发布时间:2019-06-07

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

一、前言

上篇随笔主要是针对于Xml的特性Attribute与实体之间的匹配与转换。该篇随笔主要内容为将对象转换成相应的Xml以及XElement。这2篇随笔以不同的方式对Xml进行转换与匹配,每种匹配都采用不同的角度进行操作。本文主要为对象实体的转换,下篇侧重于Xml的匹配。

二、Xml转换

2.1 实体集合转换Xml

实体集合转换Xml的方法为:public static string ToXml<T>(IList<T> entities, string rootName = "") where T : new(),通过传入的实体集合对象和Xml根名称,可以转换成相应的Xml,代码如下:

 1        
public 
static 
string ToXml<T>(IList<T> entities, 
string rootName = 
""
where T : 
new()
 2         {
 3             
if (entities == 
null || entities.Count == 
0)
 4             {
 5                 
return 
string.Empty;
 6             }
 7 
 8             StringBuilder builder = 
new StringBuilder();
 9             builder.AppendLine(XmlResource.XmlHeader);
10 
11             XElement element = ToXElement<T>(entities, rootName);
12             builder.Append(element.ToString());
13 
14             
return builder.ToString();
15         }

 针对于实体集合的转换,转换后的结果如下:

 1 <?xml version=
"
1.0" encoding="utf-8" ?>
 2 
<MapperInfoSet>
 3   <MapperInfo>
 4     <Name>MapperInfoIndex0</Name>
 5     <CreatedTime>
2012-
02-19T08:
54:
44.9411601+
08:
00</CreatedTime>
 6     <IsActive>
true</IsActive>
 7     <Value>
0</Value>
 8     <Percent>
50</Percent>
 9     <TargetUrl>www.codeplex.com?Id=
0</TargetUrl>
10   </MapperInfo>
11   <MapperInfo>
12     <Name>MapperInfoIndex1</Name>
13     <CreatedTime>
2012-
02-19T08:
54:
44.9421602+
08:
00</CreatedTime>
14     <IsActive>
false</IsActive>
15     <Value>
1</Value>
16     <Percent>
50</Percent>
17     <TargetUrl>www.codeplex.com?Id=
1</TargetUrl>
18   </MapperInfo>
19 </MapperInfoSet>

 

2.2 实体转换Xml

实体转换Xml的方法为:public static string ToXml<T>(T entity) where T : new(),通过传入的实体,可以转换成相应的Xml,代码如下:

 1         
public 
static 
string ToXml<T>(T entity) 
where T : 
new()
 2         {
 3             
if (entity == 
null)
 4             {
 5                 
return 
string.Empty;
 6             }
 7 
 8             XElement element = ToXElement<T>(entity);
 9 
10             
return element.ToString();
11         }

针对于单个实体的转换,转换后的结果如下:

1 <MapperInfo>
2   <Name>MapperInfoIndex0</Name>
3   <CreatedTime>
2012-
02-19T08:
59:
17.1387289+
08:
00</CreatedTime>
4   <IsActive>
true</IsActive>
5   <Value>
0</Value>
6   <Percent>
50</Percent>
7   <TargetUrl>www.codeplex.com?Id=
0</TargetUrl>
8 </MapperInfo>

 

2.3 实体集合转换XElement

实体转换XElement的方法为:public static XElement ToXElement<T>(IList<T> entities, string rootName = "") where T : new(),通过传入的实体集合对象和Xml根名称,可以转换成相应的XElement,代码如下:

 1         
public 
static XElement ToXElement<T>(IList<T> entities, 
string rootName = 
""
where T : 
new()
 2         {
 3             
if (entities == 
null || entities.Count == 
0)
 4             {
 5                 
return 
null;
 6             }
 7 
 8             
if (
string.IsNullOrWhiteSpace(rootName))
 9             {
10                 rootName = 
typeof(T).Name + XmlResource.XmlRootNameSuffix;
11             }
12 
13             XElement element = 
new XElement(rootName);
14 
15             
foreach (T entity 
in entities)
16             {
17                 element.Add(ToXElement<T>(entity));
18             }
19 
20             
return element;
21         }

 

2.4 实体集合转换XmlDocument

实体转换XmlDocument的方法为:public static XElement ToXmlDocument<T>(IList<T> entities, string rootName = "") where T : new(),通过传入的实体集合对象和Xml根名称,可以转换成相应的XmlDocument,代码如下:

 1         
public 
static XmlDocument ToXmlDocument<T>(IList<T> entities, 
string rootName = 
""
where T : 
new()
 2         {
 3             
if (entities == 
null || entities.Count == 
0)
 4             {
 5                 
return 
null;
 6             }
 7 
 8             XmlDocument xmlDocument = 
new XmlDocument();
 9             xmlDocument.LoadXml(ToXml<T>(entities, rootName));
10 
11             
return xmlDocument;
12         }

 

2.5 实体转换XElement

实体转换XElement的方法为:public static string ToXElement<T>(T entity) where T : new(),通过传入的实体,可以转换成相应的XElement,代码如下:

 1         
public 
static XElement ToXElement<T>(T entity) 
where T : 
new()
 2         {
 3             
if (entity == 
null)
 4             {
 5                 
return 
null;
 6             }
 7 
 8             XElement element = 
new XElement(
typeof(T).Name);
 9             PropertyInfo[] properties = 
typeof(T).GetProperties();
10             XElement innerElement = 
null;
11             
object propertyValue = 
null;
12 
13             
foreach (PropertyInfo property 
in properties)
14             {
15                 propertyValue = property.GetValue(entity, 
null);
16                 innerElement = 
new XElement(property.Name, propertyValue);
17                 element.Add(innerElement);
18             }
19 
20             
return element;
21         }

 

2.6 实体集合转换XDocument

实体转换XDocument的方法为:public static XDocument ToXDocument<T>(IList<T> entities, string rootName = "") where T : new(),通过传入的实体集合对象和Xml根名称,可以转换成相应的XDocument,代码如下:

1         
public 
static XDocument ToXDocument<T>(IList<T> entities, 
string rootName = 
""
where T : 
new()
2         {
3             
if (entities == 
null || entities.Count == 
0)
4             {
5                 
return 
null;
6             }
7           
8             
return  XDocument.Parse(ToXml<T>(entities, rootName));
9         }

 

 三、总结

以上的代码很少,主要通过重构来使代码简化。当然,将实体集合和实体转换为相应的string、XDocument、XElement、XDocument是非常简单的。单元测试的代码就不贴了,占地方。下篇随笔主要是如何将本文中转换的Xml进行匹配,本文所有的代码如下:

ExpandedBlockStart.gif
View Code
    
public 
class SimpleXmlConverter
    {
        
public 
static 
string ToXml<T>(IList<T> entities, 
string rootName = 
""
where T : 
new()
        {
            
if (entities == 
null || entities.Count == 
0)
            {
                
return 
string.Empty;
            }
            StringBuilder builder = 
new StringBuilder();
            builder.AppendLine(XmlResource.XmlHeader);
            XElement element = ToXElement<T>(entities, rootName);
            builder.Append(element.ToString());
            
return builder.ToString();
        }
        
public 
static XmlDocument ToXmlDocument<T>(IList<T> entities, 
string rootName = 
""
where T : 
new()
        {
            
if (entities == 
null || entities.Count == 
0)
            {
                
return 
null;
            }
            XmlDocument xmlDocument = 
new XmlDocument();
            xmlDocument.LoadXml(ToXml<T>(entities, rootName));
            
return xmlDocument;
        }
        
public 
static XDocument ToXDocument<T>(IList<T> entities, 
string rootName = 
""
where T : 
new()
        {
            
if (entities == 
null || entities.Count == 
0)
            {
                
return 
null;
            }
          
            
return  XDocument.Parse(ToXml<T>(entities, rootName));
        }
        
public 
static XElement ToXElement<T>(IList<T> entities, 
string rootName = 
""
where T : 
new()
        {
            
if (entities == 
null || entities.Count == 
0)
            {
                
return 
null;
            }
             
            
if (
string.IsNullOrWhiteSpace(rootName))
            {
                rootName = 
typeof(T).Name + XmlResource.XmlRootNameSuffix;
            }
            XElement element = 
new XElement(rootName);
            
foreach (T entity 
in entities)
            {
                element.Add(ToXElement<T>(entity));
            }
            
return element;
        }
        
public 
static 
string ToXml<T>(T entity) 
where T : 
new()
        {
            
if (entity == 
null)
            {
                
return 
string.Empty;
            }
            XElement element = ToXElement<T>(entity);
            
return element.ToString();
        }
        
public 
static XElement ToXElement<T>(T entity) 
where T : 
new()
        {
            
if (entity == 
null)
            {
                
return 
null;
            }
            XElement element = 
new XElement(
typeof(T).Name);
            PropertyInfo[] properties = 
typeof(T).GetProperties();
            XElement innerElement = 
null;
            
object propertyValue = 
null;
            
foreach (PropertyInfo property 
in properties)
            {
                propertyValue = property.GetValue(entity, 
null);
                innerElement = 
new XElement(property.Name, propertyValue);
                element.Add(innerElement);
            }
            
return element;
        }
        
public 
static XElement ToXElement(Type type) 
        {
            
if (type == 
null)
            {
                
return 
null;
            }
            XElement element = 
new XElement(type.Name);
            PropertyInfo[] properties = type.GetProperties();
            XElement innerElement = 
null;
            
foreach (PropertyInfo property 
in properties)
            {
                innerElement = 
new XElement(property.Name, 
null);
                element.Add(innerElement);
            }
            
return element;
        }
    }

 

转载于:https://www.cnblogs.com/jasenkin/archive/2012/02/19/simpe_xml_converter.html

你可能感兴趣的文章
【C语言】C语言函数
查看>>
为什么用到混合支付?
查看>>
4.STL六大组件
查看>>
java学习之—栈
查看>>
1.5 重点
查看>>
子序列的按位或 Bitwise ORs of Subarrays
查看>>
IN语句改写EXISTS
查看>>
C#-WinForm-用户控件如何获取父级窗体
查看>>
STL_vector
查看>>
Dev中GridView——背景颜色改变
查看>>
socket编程2
查看>>
web开发中的MVC框架与django框架的MTV模式
查看>>
django添加导包路径
查看>>
java基础知识—变量、数据类型和运算符
查看>>
hadoop队列管理(指定queue跑程序)
查看>>
Lucene 自动补全
查看>>
hibernate建表默认为UTF-8编码
查看>>
as3+php上传图片的三种方式
查看>>
jquery实现奇偶行赋值不同css值
查看>>
关于Git
查看>>