可擴展標記語言
一、概述
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();