目錄
XML檔案用途
先來看一個XML檔案
建構承載xml節點資訊的類
BookStore類
序列化
運作結果
反序列化
運作結果
XML檔案用途
xml問件是衆多檔案類型中的一種。xml最大的功能就是存儲資料,它就像一個純文字的資料庫,可以跨平台、跨系統使用。
XML檔案的序列化就是把對象轉化成可以存儲或傳輸的流狀态。與之相對的反序列化即把流狀态的資料讀入對象中。
XML檔案的結構是樹狀的<></>這樣的一對括号代表了一對節點,<BookStore>bookStore</BookStore>,這樣一對節點就代表了節點名是BookStore,内容是bookStore,
還可以為節點添加id屬性<BookStore id ="1">bookStore</BookStore>
先來看一個XML檔案
<?xml version="1.0" encoding="utf-8"?>
<BookStore>
<Book>
<Name>冰與火之歌</Name>
<Time>2020.12.16</Time>
</Book>
<Book>
<Name>123456</Name>
<Time>2020.12.16</Time>
</Book>
<Book>
<Name>我個夢想</Name>
<Time>2020.12.16</Time>
</Book>
<Book>
<Name>我有夢想</Name>
<Time>2020.12.16</Time>
</Book>
<Book>
<Name>我有一個夢</Name>
<Time>2020.12.16</Time>
</Book>
</BookStore>
檔案的第一行代表了xml的版本和檔案編碼格
建構承載xml節點資訊的類
根據xml的内容我們需要建構一個BookStore類,它包含了子節點Book類,Book中又有time,name屬性。
BookStore類
public class BookStore
{
List<Book> booklist = new List<Book>();
[XmlElement(ElementName = "Book")]
public List<Book> Booklist
{
get { return booklist; }
set { booklist = value; }
}
}
Book類
public class Book
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private string time;
public string Time
{
get { return time; }
set { time = value; }
}
public Book() { }
public Book(string _name, string _time)
{
name = _name;
time = _time;
}
}
有了承載資訊的類就可以對xml進行序列化和反序列化了。首先來看序列化。
序列化
public static void xmlSerialize()
{
Book book1 = new Book("馬丁路德金", "2020.1.2");
Book book2 = new Book("冰與火之歌", "2010.1.2");
Book book3 = new Book("我有一個夢想", "2020.1.2");
Book book4 = new Book("c#從入門到放棄", "2020.1.2");
BookStore bookstore = new BookStore();
bookstore.Booklist.Add(book1);
bookstore.Booklist.Add(book2);
bookstore.Booklist.Add(book3);
bookstore.Booklist.Add(book4);
StringWriter sw = new StringWriter();
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
XmlSerializer serializer = new XmlSerializer(typeof(BookStore));
serializer.Serialize(sw, bookstore, ns);
Console.Write(sw.ToString());
}
運作結果
<?xml version="1.0" encoding="utf-16"?>
<BookStore>
<Book>
<Name>馬丁路德金</Name>
<Time>2020.1.2</Time>
</Book>
<Book>
<Name>冰與火之歌</Name>
<Time>2010.1.2</Time>
</Book>
<Book>
<Name>我有一個夢想</Name>
<Time>2020.1.2</Time>
</Book>
<Book>
<Name>c#從入門到放棄</Name>
<Time>2020.1.2</Time>
</Book>
</BookStore>請按任意鍵繼續. . .
反序列化
public static void xmlDeserialize()
{
//xml來源可能是外部檔案,也可能是從其他系統獲得
XmlSerializer xmlSearializer = new XmlSerializer(typeof(BookStore));
using(var fs = File.OpenRead(@"D:\ss.xml"))
{
BookStore info = (BookStore)xmlSearializer.Deserialize(fs);
foreach (Book per in info.Booklist)
{
Console.WriteLine("shu:");
Console.WriteLine(" 姓名:" + per.Name);
Console.WriteLine(" 姓名:" + per.Time);
}
}
}
運作結果
shu:
姓名:冰與火之歌
姓名:2020.12.16
shu:
姓名:123456
姓名:2020.12.16
shu:
姓名:我個夢想
姓名:2020.12.16
shu:
姓名:我有夢想
姓名:2020.12.16
shu:
姓名:我有一個夢
姓名:2020.12.16
請按任意鍵繼續. . .