zoukankan      html  css  js  c++  java
  • 虚拟化和反序列化

    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:测试文件夹aseInfo.xml",FileMode.CreateNew);
                //创建XML命名空间
                XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                ns.Add("", "");
                XmlSerializer serializer = new XmlSerializer(typeof(BaseInfo));
                serializer.Serialize(sw, baseInfo, ns);
                File.WriteAllText(@"F:测试文件夹aseInfo.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
    
    
  • 相关阅读:
    每日日报7月15日
    每日日报7月14日
    ecplise下 java问题处理
    Visual Studio Code for .Net Framework
    Go语言操作MySQL数据库
    Go语言Gin-4中间件
    Go语言Gin-2.数据传输
    Go语言Gin-1.路由
    13.Go语言-并发编程
    12.Go语言-网络编程
  • 原文地址:https://www.cnblogs.com/lxf1117/p/3977656.html
Copyright © 2011-2022 走看看