using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; class Program { static void Main(string[] args) { Person me = new Person(); me.Age = 38; me.WeightInPounds = 200; Console.WriteLine(me.Age); Console.WriteLine(me.WeightInPounds); Stream s = File.Open("Me.dat", FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(s, me); s.Close(); s = File.Open("Me.dat", FileMode.Open); bf = new BinaryFormatter(); object o = bf.Deserialize(s); Person p = o as Person; if (p != null) Console.WriteLine("DeSerialized Person aged: {0} weight: {1}", p.Age, p.WeightInPounds); s.Close(); } } [Serializable] public class Person { public Person() { } public int Age; public int WeightInPounds; }
File Stream
Deserialize Object
using System; using System.Runtime.Serialization.Formatters.Binary; using System.IO; [Serializable] public class BookRecord { public String title; public int asin; public BookRecord(String title, int asin) { this.title = title; this.asin = asin; } } public class DeserializeObject { public static void Main() { FileStream streamIn = new FileStream(@"book.obj", FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); BookRecord book = (BookRecord)bf.Deserialize(streamIn); streamIn.Close(); Console.Write(book.title + " " + book.asin); } }
Use Serializable attribute to mark a class
using System; using System.Runtime.Serialization.Formatters.Binary; using System.IO; [Serializable] public class BookRecord { public String title; public int asin; public BookRecord(String title, int asin) { this.title = title; this.asin = asin; } } public class SerializeObject { public static void Main() { BookRecord book = new BookRecord("title",123456789); FileStream stream = new FileStream(@"book.obj",FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(stream, book); stream.Close(); } }
Use Serializable attribute to mark a generic class
using System; using System.Collections.Generic; using System.Runtime.Serialization; using System.IO; using System.Runtime.Serialization.Formatters.Binary; [Serializable] public class SampleCollection<T> : List<T> { private int _intData; private string _stringData; public SampleCollection(int intData, string stringData) { this._intData = intData; this._stringData = stringData; } public int IntVal { get { return this._intData; } } public string StrVal { get { return this._stringData; } } } public class TypeSafeSerializer { private TypeSafeSerializer() { } public static void AddValue<T>(String name, T value, SerializationInfo serInfo) { serInfo.AddValue(name, value); } public static T GetValue<T>(String name, SerializationInfo serInfo) { T retVal = (T)serInfo.GetValue(name, typeof(T)); return retVal; } } public class MainClass { public static void Main() { SampleCollection<string> strList = new SampleCollection<string>(111, "Value1"); strList.Add("Val1"); strList.Add("Val2"); MemoryStream stream = new MemoryStream(); BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, strList); stream.Seek(0, SeekOrigin.Begin); SampleCollection<string> newList = (SampleCollection<string>)formatter.Deserialize(stream); Console.Out.WriteLine(newList.IntVal); Console.Out.WriteLine(newList.StrVal); foreach (string listValue in newList) Console.Out.WriteLine(listValue); } }
Use SoapFormatter
using System; using System.IO; using System.Collections; using System.Runtime.Serialization.Formatters.Soap; using System.Runtime.Serialization.Formatters.Binary; class MainClass { private static void BinarySerialize(ArrayList list) { using (FileStream str = File.Create("people.bin")) { BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(str, list); } } private static ArrayList BinaryDeserialize() { ArrayList people = null; using (FileStream str = File.OpenRead("people.bin")) { BinaryFormatter bf = new BinaryFormatter(); people = (ArrayList)bf.Deserialize(str); } return people; } private static void SoapSerialize(ArrayList list) { using (FileStream str = File.Create("people.soap")) { SoapFormatter sf = new SoapFormatter(); sf.Serialize(str, list); } } private static ArrayList SoapDeserialize() { ArrayList people = null; using (FileStream str = File.OpenRead("people.soap")) { SoapFormatter sf = new SoapFormatter(); people = (ArrayList)sf.Deserialize(str); } return people; } public static void Main() { ArrayList people = new ArrayList(); people.Add("G"); people.Add("L"); people.Add("A"); BinarySerialize(people); SoapSerialize(people); ArrayList binaryPeople = BinaryDeserialize(); ArrayList soapPeople = SoapDeserialize(); Console.WriteLine("Binary people:"); foreach (string s in binaryPeople) { Console.WriteLine(" " + s); } Console.WriteLine(" SOAP people:"); foreach (string s in soapPeople) { Console.WriteLine(" " + s); } } }
Serialize Class to Soap message
using System; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Soap; public class Serializer { public static void Main(string [] args) { StudentList personnel = CreateStudentList(); IFormatter soapFormatter = new SoapFormatter(); using (FileStream stream = File.OpenWrite("StudentListSoap.xml")) { soapFormatter.Serialize(stream,personnel); } } private static StudentList CreateStudentList() { StudentList personnel = new StudentList(); personnel.Students = new Employee [] {new Employee()}; personnel.Students[0].FirstName = "Apple"; personnel.Students[0].MiddleInitial = "M"; personnel.Students[0].LastName = "Bear"; personnel.Students[0].Addresses = new Address [] {new Address()}; personnel.Students[0].Addresses[0].AddressType = AddressType.Home; personnel.Students[0].Addresses[0].Street = new string [] {"Culloden"}; personnel.Students[0].Addresses[0].City = "Vancouver"; personnel.Students[0].Addresses[0].State = State.BC; personnel.Students[0].Addresses[0].Zip = "V5V 4X7"; personnel.Students[0].StartDate = new DateTime(2006,10,12); return personnel; } } [Serializable] public enum AddressType { Home, Office } [Serializable] public enum State { BC, ON } [Serializable] public class Address { public AddressType AddressType; public string[] Street; public string City; public State State; public string Zip; } [Serializable] public class TelephoneNumber { public string AreaCode; public string Exchange; public string Number; } [Serializable] public class Employee { public string FirstName; public string MiddleInitial; public string LastName; public Address [] Addresses; public TelephoneNumber [] TelephoneNumbers; public DateTime StartDate; } [Serializable] public class StudentList { public Employee [] Students; }
Serialize to SOAP based XML file
using System; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization.Formatters.Soap; public class RoomApp { public static void Main() { // Make a room and listen to the tunes. Console.WriteLine("Made a My Room..."); MyRoom myAuto = new MyRoom("My", 50, false, true); myAuto.TurnOnRadio(true); myAuto.GoUnderWater(); // Save the same room into SOAP format. Console.WriteLine("Now saving room to XML file"); FileStream myStream = File.Create("RoomData.xml"); SoapFormatter myXMLFormat = new SoapFormatter(); myXMLFormat.Serialize(myStream, myAuto); myStream.Close(); // Read in the Room from the XML file. Console.WriteLine("Reading room from XML file."); myStream = File.OpenRead("RoomData.xml"); MyRoom roomFromXML = (MyRoom)myXMLFormat.Deserialize(myStream); Console.WriteLine(roomFromXML.PetName + " is alive!"); roomFromXML.TurnOnRadio(true); myStream.Close(); } } [Serializable] public class Radio { [NonSerialized] private int objectIDNumber = 9; public Radio(){} public void On(bool state) { if(state == true) Console.WriteLine("Music is on..."); else Console.WriteLine("No tunes..."); } } [Serializable] public class Room { protected string petName; protected int maxInternetSpeed; protected Radio theRadio = new Radio(); public Room(string petName, int maxInternetSpeed) { this.petName = petName; this.maxInternetSpeed = maxInternetSpeed; } public Room() {} public String PetName { get { return petName; } set { petName = value; } } public int MaxInternetSpeed { get { return maxInternetSpeed; } set { maxInternetSpeed = value; } } public void TurnOnRadio(bool state) { theRadio.On(state); } } [Serializable] public class MyRoom : Room { protected bool isFlightWorthy; protected bool isSeaWorthy; public MyRoom(string petName, int maxInternetSpeed, bool canFly, bool canSubmerge) : base(petName, maxInternetSpeed) { this.isFlightWorthy = canFly; this.isSeaWorthy = canSubmerge; } public MyRoom(){} public void Fly() { if(isFlightWorthy) Console.WriteLine("Taking off!"); else Console.WriteLine("Falling off cliff!"); } public void GoUnderWater() { if(isSeaWorthy) Console.WriteLine("Diving...."); else Console.WriteLine("Drowning!!!"); } }