XML序列化和反序列化

来源:互联网 发布:阿里云备案核验单填写 编辑:程序博客网 时间:2024/04/25 07:06


http://www.cnblogs.com/lhking/archive/2008/11/29/1344023.html

XML序列化和反序列化
 注释很详细,一看就知道,简单易解。

using System;

namespace SerDser
{
    [Serializable] //表示此类可以被序列化
    public class Course
    {
        public string Name;
        public string Description;
        /// <summary>
        /// 必须要有一个无参的构造器
        /// </summary>
        public Course()
        { }
        public Course(string name, string description)
        {
            Name = name;
            Description = description;
        }
    }
}


using System;

namespace SerDser
{
    [Serializable] //表示此类可以被序列化,能被序列化就可以被反序列化
    public class Person
    {
        private string name;
        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        public string Sex;
        public int Age = 31;
        public Course[] Courses;

        public Person() { } //无参构造器
        public Person(string Name)
        {
            this.name = Name;
            Sex = "男";
        }
    }
}


 

using System;
using System.IO;//对文件操作
using System.Xml.Serialization; //引入序列化所用到的命名空间

namespace SerDser
{
    public class Program
    {
        static void Main(string[] args)
        {
            Program p = new Program();
            p.Serialize();
            p.Deserialize();
        }                     
        public void Serialize() //序列化Person类
        {
            Console.WriteLine("开始序列化......");
            Person c = new Person("lhking");
            c.Courses = new Course[2];
            c.Courses[0] = new Course("英语","交流工具");
            c.Courses[1] = new Course("数学","自然科学");
            XmlSerializer xs = new XmlSerializer(typeof(Person));
            Stream stream = new FileStream("c://sedes.xml", FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
            xs.Serialize(stream, c);
            stream.Close();
            Stream stream1 = new FileStream("c://sedes.txt", FileMode.Create, FileAccess.Write, FileShare.None);
            xs.Serialize(stream1, c);
            stream1.Close();
            //两个文件的内容是一样的。
            Console.WriteLine();
            Console.WriteLine("序列化完毕");
            System.Diagnostics.Process.Start(@"c:/sedes.xml");
        }
        public void Deserialize() //反序列化Person类
        {
            Console.WriteLine("开始反序列化......");
            Console.WriteLine("反序列化完毕,Output.....");
            System.Threading.Thread.Sleep(2000); //线程暂定2秒
            XmlSerializer xs = new XmlSerializer(typeof(Person));
            Stream stream = new FileStream("c://sedes.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            Person p = (Person)xs.Deserialize(stream);
            Console.WriteLine(p.Name);
            Console.WriteLine(p.Age);
            Console.WriteLine(p.Courses.Length);
            Console.WriteLine(p.Courses[0].Name);
            Console.WriteLine(p.Courses[0].Description);
            Console.WriteLine(p.Courses[1].Name);
            Console.WriteLine(p.Courses[1].Description);
            Console.Read();
        }
    }
}

原创粉丝点击