using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;
using System.Xml.Serialization;
using System.Reflection;
namespace 自定义xml序列化及自定义特性
{
class Program
{
static void Main(string[] args)
{
List<object> p = new List<object>();
Person pp = new Person();
pp.Age = 20;
pp.Name = "xhc1";
p.Add(pp);
Person ppp = new Person();
ppp.Name = "xhc2";
ppp.Age = 21;
p.Add(ppp);
Getxml(p);
}
static void Getxml(List<object> li)
{
XDocument doc = new XDocument();
XElement roott = new XElement("根节点");
doc.Add(roott);
//不带自定义属性的序列化
foreach (object obj in li)
{
Type type = obj.GetType();
XElement root = new XElement(type.Name.ToString());
//获取属性,和值
foreach (PropertyInfo item in type.GetProperties())
{
XElement xe = new XElement(item.Name.ToString(), item.GetValue(obj, null).ToString());
root.Add(xe);
}
roott.Add(root);
}
//带自定义属性的序列化
foreach (object obj in li)
{
Type type = obj.GetType();
XElement root = new XElement(type.Name.ToString());
//获取属性,和值
foreach (PropertyInfo item in type.GetProperties())
{
//获取特性值;
object[] o = item.GetCustomAttributes(typeof(ZdyarriAttribute),false);
XElement xe = new XElement(item.Name.ToString(), item.GetValue(obj, null).ToString());
XAttribute xa = new XAttribute("中文",((ZdyarriAttribute)o[0]).DisZdyarri.ToString());
xe.Add(xa);
root.Add(xe);
}
roott.Add(root);
}
doc.Save(@"C:\xx.xml");
}
}
public class Person
{
[Zdyarri("姓名")]
public string Name
{
set;
get;
}
[ZdyarriAttribute("年龄")]
public int Age
{
set;
get;
}
}
public class ZdyarriAttribute : Attribute
{
public ZdyarriAttribute(string str)
{
DisZdyarri = str;
}
public string DisZdyarri
{
get;
set;
}
}
}