虚拟化和反序列化

1、为什么要序列化:将我们自己的对象状态(数据)持久化、传输等。

2、.net framwork 提供了好几种序列化api

A、二进制序列化:

        /// <summary>
        /// 二进制序列化方法
        /// </summary>
        public static void Serializer()
        {
            MyObject obj = new MyObject();
            obj.n1 = 1;
            obj.n2 = 24;
            obj.str = "Some String";
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(@"F:\测试文件夹\ceshi.txt", FileMode.Create, FileAccess.Write, FileShare.None);
            formatter.Serialize(stream, obj);
            stream.Flush();
            stream.Close();
        
        }

        /// <summary>
        /// 二进制反序列化
        /// </summary>
        public static  void DesSerializer()
        {
            IFormatter formatter = new BinaryFormatter();
            Stream stream = new FileStream(@"F:\测试文件夹\ceshi.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
            MyObject obj = (MyObject)formatter.Deserialize(stream);
            stream.Close();

            // Here's the proof.
            Console.WriteLine("n1: {0}", obj.n1);
            Console.WriteLine("n2: {0}", obj.n2);
            Console.WriteLine("str: {0}", obj.str);
            Console.ReadKey();
        }

B、XML序列化

   public  class BaseInfo
    {
        List<Person> perList = new List<Person>();

        [XmlElement(ElementName = "Person")]
        public List<Person> PerList
        {
         
            get { return perList; }
            set { perList = value; }
        }

    }

  public   class Person
    {

        string name;
        int age;
        List<Books> bookList = new List<Books>();

        /// <summary>
        /// 必须有默认的构造函数
        /// </summary>
        public Person()
        { }

        public Person(string name, int age)
        {
            this.name = name;
            this.age = age;
        }

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public int Age
        {
            get { return age; }
            set { age = value; }
        }

        [XmlElement(ElementName = "Books")]
        public List<Books> BookList
        {
            get { return bookList; }
            set { bookList = value; }
        }
    }

    public class Books
    {
        List<Book> bookList = new List<Book>();

        [XmlElement(ElementName = "Book")]
        public List<Book> BookList
        {
            get { return bookList; }
            set { bookList = value; }
        }
    }
    public class Book
    {
        string isbn;
        string title;

        public Book() { }

        public Book(string isbn, string title)
        {
            this.isbn = isbn;
            this.title = title;
        }

        public string ISBN
        {
            get { return isbn; }
            set { isbn = value; }
        }

        public string Title
        {
            get { return title; }
            set { title = value; }
        }
    }
    /// <summary>
        /// xml序列化方法
        /// </summary>
        public static void xmlSerialize()
        {
            Book b1 = new Book("111", "书1");
            Book b2 = new Book("222", "书2");
            Book b3 = new Book("333", "书3");
            Books bs1 = new Books();
            Books bs2 = new Books();
            bs1.BookList.Add(b1);
            bs1.BookList.Add(b2);
            bs2.BookList.Add(b3);
            Person p1 = new Person("张三", 11);
            Person p2 = new Person("李四", 22);
            p1.BookList.Add(bs1);
            p2.BookList.Add(bs2);
            BaseInfo baseInfo = new BaseInfo();
            baseInfo.PerList.Add(p1);
            baseInfo.PerList.Add(p2);

            StringWriter sw = new StringWriter();
            //FileStream fs = new FileStream(@"F:\测试文件夹\baseInfo.xml",FileMode.CreateNew);
            //创建XML命名空间
            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
            ns.Add("", "");
            XmlSerializer serializer = new XmlSerializer(typeof(BaseInfo));
            serializer.Serialize(sw, baseInfo, ns);
            File.WriteAllText(@"F:\测试文件夹\baseInfo.xml", sw.ToString());
            Console.Write(sw.ToString());
            sw.Close();
            Console.ReadKey();
        }


        /// <summary>
        /// xml反序列化方法
        /// </summary>
        public static void xmlDeserialize(string path)
        {
            //xml来源可能是外部文件,也可能是从其他系统获得
            FileStream file = new FileStream(path, FileMode.Open, FileAccess.Read);
            XmlSerializer xmlSearializer = new XmlSerializer(typeof(BaseInfo));
            BaseInfo info = (BaseInfo)xmlSearializer.Deserialize(file);
            file.Close();
            foreach (Person per in info.PerList)
            {
                Console.WriteLine("人员:");
                Console.WriteLine(" 姓名:" + per.Name);
                Console.WriteLine(" 年龄:" + per.Age);
                foreach (Books b1 in per.BookList)
                {
                    foreach (Book b in b1.BookList)
                    {
                        Console.WriteLine(" 书:");
                        Console.WriteLine("     ISBN:" + b.ISBN);
                        Console.WriteLine("     书名:" + b.Title);
                    }
                }
            }
            Console.ReadKey();
        }

C、Json序列化

类名:System.Web.Script.Serialization.JavaScriptSerializer

方法:Serialize

.Net自带的两种Json序列化
使用组件:
Newtonsoft.Json http://www.cnblogs.com/yanweidie/p/4605212.html#_label1

 

posted @ 2014-09-17 17:28  谷樵  阅读(265)  评论(0编辑  收藏  举报