C#XML學習筆記

可擴展標記語言
一、概述
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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章