1. XmlSerializer 类
该类用一种高度松散耦合的方式提供串行化服务。你的类不需要继承特别的基类,而且它们也不需要实现特别的接口。相反,你只需在你的类或者这些类的公共域以及读/写属性里加上自定义的特性。XmlSerializer通过反射机制读取这些特性并用它们将你的类和类成员映射到xml元素和属性。
2. XmlAttributeAttribute 类
指定类的公共域或读/写属性对应xml文件的Attribute。
例:[XmlAttribute(“type”)] or [XmlAttribute(AttributeName=”type”)]
3. XmlElementAttribute类
指定类的公共域或读/写属性对应xml文件的Element。
例:[XmlElement(“Maufacturer”)] or [XmlElement(ElementName=”Manufacturer”)]
4. XmlRootAttribute类
Xml序列化时,由该特性指定的元素将被序列化成xml的根元素。
例:[XmlRoot(“RootElement”)] or [XmlRoot(ElementName = “RootElements”)]
5. XmlTextAttribute 类
Xml序列化时,由该特性指定的元素值将被序列化成xml元素的值。一个类只允许拥有一个该特性类的实例,因为xml元素只能有一个值。
6. XmlIgnoreAttribute类
Xml序列化时不会序列化该特性指定的元素。
要注意
1. 序列化数据只包含数据本身以及类的结构。不包括类型标识和程序集信息。
2. 只能序列化公共属性和字段。如果需要序列化非公共数据,请使用 BinaryFormatter 类而不是 XML 序列化。
3. 类必须有一个将由 XmlSerializer 序列化的默认构造函数。
4. 不能序列化方法。
需要引用using System.Xml.Serialization;这个类
添加测试数据 Goods g1 = new Goods();
g1.name = "可乐";
g1.price = 2;
g1.num = 2200;
Goods g2 = new Goods();
g2.name = "雪碧";
g2.price = 2;
g2.num = 2200;
List<Goods> list = new List<Goods>();
list.Add(g1);
list.Add(g2);
序列化
XmlSerializer xs = new XmlSerializer(typeof(List<Goods>));
using (StreamWriter sw=File.CreateText("goods.xml"))
{
xs.Serialize(sw, list);
}
Console.ReadLine();
StreamWriter 写入文件
反序列化
List<Goods> list = new List<Goods>();
XmlSerializer xs = new XmlSerializer(typeof(List<Goods>));
using (StreamReader sr = File.OpenText("goods.xml"))
{
list = xs.Deserialize(sr) as List<Goods>;
}
foreach (var item in list)
{
Console.WriteLine(item.name);
}
Console.ReadLine();
StreamReader 读取