可扩展标记语言
一、概述
XML用来描述数据,它用于配置文件、源代码文档、使用SOAP的Web服务等。它在某些方面已经被JSON取代(例如,配置文件和在基于REST的Web服务中传输数据),因为该技术使用的开销更少,很容易在JavaScript中使用。然而JSON不能在今天所以使用XML的场景中代替XML.
二、处理XML概述
为了处理XML,可以使用不同的选项。
可以阅读完整的文档,使用XmlDocument类在文档对象模型(DOM)层次结构内导航。也可以使用XmlReader和XmlWriter。使用XmlReader比较复杂,但可以读取更大的文件。使用XmlDocument把完整的文档加载在内存中。使用XmlReader可以逐节点的读取。
使用Xml的另一种方式是使用System.Xml.Serialization名称空间,把.NET对象树序列化为XML,把XML数据反序列化为.NET对象。
三、序列化与反序列化
序列化是将对象状态转换为可保持或可传输的形式的过程。序列化的补集是反序列化,后者将流转换为对象。这两个过程一起保证数据易于存储和传输。
1、要序列化对象,首先需要实例化一个XmlSerializer对象,指定要序列化的对象类型,然后实例化一个流/写入器对象,以把文件写入流/文档中。最后一步是在XmlSerializer上调用Serializer()方法,给它传递流/写入器对象和要序列化的对象。
例子1:
public static void SerializeProduct()
{
//new products object
var product = new Product
{
ProductID = 200,
CategoryID = 100,
Discontinued = false,
ProductName = "Serialize Objects",
QuantityPerUnit = "6",
ReorderLevel = 1,
SupplierID = 1,
UnitPrice = 1000,
UnitsInStock = 10,
UnitsOnOrder = 0
};
FileStream stream = File.OpenWrite("product.xml");
using (TextWriter writer = new StreamWriter(stream))
{
XmlSerializer serializer = new XmlSerializer(typeof(Product));
serializer.Serialize(writer, product);
}
}
例子2:
List<Student> list = new List<Student>();
list.Add(new Student() { Address = "地址", Age = 10, Name = "zyy", TelPhone = "" });
XmlSerializer xml = new XmlSerializer(typeof(List<Student>));
MemoryStream Stream1 = new MemoryStream();
xml.Serialize(Stream1, list);
StreamReader streamReader = new StreamReader(Stream1);
Stream1.Position = 0;
//输出序列化后的内容
var data = streamReader.ReadToEnd();
2、反序列化
StreamReader stream = new StreamReader(@"D:\new.txt");
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Student>));
var list = xmlSerializer.Deserialize(stream);
stream.Dispose();