要利用LINQ to XML与反射将任意类型的泛型集合转换成XML格式字符串,需要按照以下步骤实现:
第一步:创建XML文档对象
首先,我们需要创建一个XDocument对象,这个对象将表示我们要转换的XML文档,然后通过它来操作整个XML文档实现转换。
XDocument doc = new XDocument(new XElement("Root"));
这里使用了XElement的构造方法,传入一个参数“Root”,表示创建的XML文档的根节点名称为“Root”。同时也可以添加一些其他属性等设置,这里不再赘述。
第二步:遍历泛型集合并填充XDocument对象
在创建好XML文档对象之后,我们需要遍历传入的泛型集合,并将其添加到XDocument对象中,形成XML文档。这里可以借助反射获取每个对象的属性和属性值,将其封装成XElement对象,再添加到XDocument对象中。
foreach (var item in collection)
{
XElement element = new XElement(item.GetType().Name);
PropertyInfo[] properties = item.GetType().GetProperties();
foreach (var property in properties)
{
object value = property.GetValue(item);
XElement subElement = new XElement(property.Name, value);
element.Add(subElement);
}
doc.Root.Add(element);
}
这里假设传入的泛型集合变量名为“collection”,并使用了foreach循环遍历。在循环内部,我们通过item.GetType().Name获取了每个对象的类型名称,并创建了对应的XElement对象。然后通过反射获取每个对象的属性和属性值,将其封装成一个个XElement子节点,并添加到XElement对象中。最后将这个对象添加到XDocument的根节点中。
第三步:将XDocument对象转换成XML字符串
完成了上述步骤之后,XDocument对象中已经包含了整个XML文档内容。我们可以调用ToString()方法将其转换成XML格式字符串,返回给调用者。
return doc.ToString();
至此,整个转换的过程已经完成。
示例1
对于一个Person类,有如下定义:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
现在我们有一个泛型集合,其中存放了若干个Person对象实例:
List<Person> persons = new List<Person>
{
new Person
{
Name = "张三",
Age = 20
},
new Person
{
Name = "李四",
Age = 25
}
};
我们可以调用上文中所写的方法,将这个泛型集合转换成XML格式字符串:
string result = ConvertToXmlString(persons);
转换后的XML格式字符串如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Person>
<Name>张三</Name>
<Age>20</Age>
</Person>
<Person>
<Name>李四</Name>
<Age>25</Age>
</Person>
</Root>
示例2
对于一个Student类,有如下定义:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
public int Age { get; set; }
}
现在我们有一个泛型集合,其中存放了若干个Student对象实例:
List<Student> students = new List<Student>
{
new Student
{
Id = 1,
Name = "张三",
Gender = "男",
Age = 20
},
new Student
{
Id = 2,
Name = "李四",
Gender = "女",
Age = 23
}
};
我们可以调用上文中所写的方法,将这个泛型集合转换成XML格式字符串:
string result = ConvertToXmlString(students);
转换后的XML格式字符串如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Student>
<Id>1</Id>
<Name>张三</Name>
<Gender>男</Gender>
<Age>20</Age>
</Student>
<Student>
<Id>2</Id>
<Name>李四</Name>
<Gender>女</Gender>
<Age>23</Age>
</Student>
</Root>
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法 - Python技术站