目录
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
请按任意键继续. . .