c# 实现xml文件的序列化和反序列化

目录

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值