zoukankan      html  css  js  c++  java
  • C#--序列化与反序列化

    引用:

    序列化与反序列化

    解释:

    序列化,就是将一个对象保存到文件中去,而反序列化就是将该文件重新保存为一个对象.

    序列化的三种方式:

    1.BinaryFormatter

        class BinarySerialize : ISerialize
        {
            FileStream fs;
            string filepath = @"D:/1/1.txt";
    
            public void Serialize(Book book)
            {
                using (fs = new FileStream(filepath, FileMode.Create))
                {
                    BinaryFormatter formate = new BinaryFormatter();
                    formate.Serialize(fs, book);
                }
            }
    
            public Book DeSerialize()
            {
                Book book;
                using (fs = new FileStream(filepath, FileMode.Open))
                {
                    BinaryFormatter formate = new BinaryFormatter();
                    book = (Book)formate.Deserialize(fs);
                }
    
                return book;
            }
        }
    序列化之后结果如下:
    image 

    2.SoapFormatter

        class SoapSerialize : ISerialize
        {
            FileStream fs;
            string filepath = @"D:/1/2.txt";
    
            public void Serialize(Book book)
            {
                using (fs = new FileStream(filepath, FileMode.Create))
                {
                    SoapFormatter formate = new SoapFormatter();
                    formate.Serialize(fs, book);
                }
            }
    
            public Book DeSerialize()
            {
                Book book;
                using (fs = new FileStream(filepath, FileMode.Open))
                {
                    SoapFormatter formate = new SoapFormatter();
                    book = (Book)formate.Deserialize(fs);
                }
                return book;
            }
    
        }
    序列化之后,结果如下;
    image 

    3.XmlSerializer

        class XMLSeria : ISerialize
        {
            FileStream fs;
            string filepath = @"D:/1/3.txt";
    
            public void Serialize(Book book)
            {
                using (fs = new FileStream(filepath, FileMode.Create))
                {
                    XmlSerializer formate = new XmlSerializer(typeof(Book));
                    formate.Serialize(fs, book);
                }
            }
    
            public Book DeSerialize()
            {
                Book book;
                using (fs = new FileStream(filepath, FileMode.Open))
                {
                    XmlSerializer formate = new XmlSerializer(typeof(Book));
                    book = (Book)formate.Deserialize(fs);
                }
                return book;
            }
    
        }
    序列化之后,结果如下:
    image 
    完整源码如下:
    代码段1:
    定义类库Define
    namespace Define
    {
        [Serializable]
        public class Book
        {
            string bookname;
    
            public string BookName
            {
                get
                {
                    return this.bookname;
                }
                set
                {
                    this.bookname = value;
                }
            }
    
            int price;
            public int Price
            {
                get
                {
                    return this.price;
                }
                set
                {
                    this.price = value;
                }
            }
    
            public override string ToString()
            {
                return "BookName:" + this.bookname + "<br/>Price:" + this.price.ToString() + "<br/>";
            }
        }
    
    
        public interface ISerialize
        {
            void Serialize(Book book);
            Book DeSerialize();
        }
    
        class BinarySerialize : ISerialize
        {
            FileStream fs;
            string filepath = @"D:/1/1.txt";
    
            public void Serialize(Book book)
            {
                using (fs = new FileStream(filepath, FileMode.Create))
                {
                    BinaryFormatter formate = new BinaryFormatter();
                    formate.Serialize(fs, book);
                }
            }
    
            public Book DeSerialize()
            {
                Book book;
                using (fs = new FileStream(filepath, FileMode.Open))
                {
                    BinaryFormatter formate = new BinaryFormatter();
                    book = (Book)formate.Deserialize(fs);
                }
    
                return book;
            }
        }
    
        class SoapSerialize : ISerialize
        {
            FileStream fs;
            string filepath = @"D:/1/2.txt";
    
            public void Serialize(Book book)
            {
                using (fs = new FileStream(filepath, FileMode.Create))
                {
                    SoapFormatter formate = new SoapFormatter();
                    formate.Serialize(fs, book);
                }
            }
    
            public Book DeSerialize()
            {
                Book book;
                using (fs = new FileStream(filepath, FileMode.Open))
                {
                    SoapFormatter formate = new SoapFormatter();
                    book = (Book)formate.Deserialize(fs);
                }
                return book;
            }
    
        }
    
    
        class XMLSeria : ISerialize
        {
            FileStream fs;
            string filepath = @"D:/1/3.txt";
    
            public void Serialize(Book book)
            {
                using (fs = new FileStream(filepath, FileMode.Create))
                {
                    XmlSerializer formate = new XmlSerializer(typeof(Book));
                    formate.Serialize(fs, book);
                }
            }
    
            public Book DeSerialize()
            {
                Book book;
                using (fs = new FileStream(filepath, FileMode.Open))
                {
                    XmlSerializer formate = new XmlSerializer(typeof(Book));
                    book = (Book)formate.Deserialize(fs);
                }
                return book;
            }
    
        }
    
        public interface BaseFacotry
        {
            ISerialize CreateSerialize();
        }
    
        class BinaryFactory : BaseFacotry
        {
            public ISerialize CreateSerialize()
            {
                return new BinarySerialize();
            }
        }
    
        class SoapFactory : BaseFacotry
        {
            public ISerialize CreateSerialize()
            {
                return new SoapSerialize();
            }
        }
    
        class XMLFactory : BaseFacotry
        {
            public ISerialize CreateSerialize()
            {
                return new XMLSeria();
            }
        }
    }
    代码段2:
    前台调用:
        <asp:Button ID="BinaryFactory" runat="server" Text="BinarySerialize" onclick="Btn_Click" />
        <asp:Button ID="SoapFactory" runat="server" Text="SoapSerialize" onclick="Btn_Click" />
        <asp:Button ID="XMLFactory" runat="server" Text="XMLSerialize" onclick="Btn_Click"  />
    
        protected void Btn_Click(object sender, EventArgs e)
        {
            Book book = new Book();
            book.BookName = "入门经典";
            book.Price = 120;
    
            string id = ((Button)sender).ID;
    
            BaseFacotry factory = (BaseFacotry)Assembly.Load("Define").CreateInstance("Define." + id);
    
            ISerialize serialize = factory.CreateSerialize();
            serialize.Serialize(book);
    
            Book b = serialize.DeSerialize();
            Response.Write(b.ToString());
        }
  • 相关阅读:
    spring和mybatis整合配置文件
    点击不同按钮,加载不同的页面(不使用iframe的情况下)
    两个完整的jquery slide多方面滑动效果实例
    autofac无法解析一例
    c# Random太快产生的随机数会重复
    linq和ef关于group by取最大值的两种写法
    JavaScript 汉字与拼音互转终极方案 附JS拼音输入法
    使用USB Key(加密狗)实现身份认证
    让Dreamweaver支持cshtml (MVC Razor环境)
    使用EF扩展EntityFramework.BulkInsert实现批量插入
  • 原文地址:https://www.cnblogs.com/loveYN/p/4509703.html
Copyright © 2011-2022 走看看