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; } }
序列化之后结果如下:
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; } }
序列化之后,结果如下;
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; } }
序列化之后,结果如下:
完整源码如下:
代码段1:
定义类库Definenamespace 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()); }