Mega Code Archive

 
Categories / C# / Class Interface
 

Custom Serialization using ISerializable

using System; using System.Collections.Generic; using System.Text; using System.Runtime.Serialization; using System.Text; using System.IO; using System.Runtime.Serialization.Formatters.Soap; [Serializable] class MyStringData : ISerializable {     public string dataItemOne, dataItemTwo;     public MyStringData() { }     private MyStringData(SerializationInfo si, StreamingContext ctx) {         dataItemOne = si.GetString("First_Item").ToLower();         dataItemTwo = si.GetString("dataItemTwo").ToLower();     }     void ISerializable.GetObjectData(SerializationInfo info, StreamingContext ctx) {         // Fill up the SerializationInfo object with the formatted data.         info.AddValue("First_Item", dataItemOne.ToUpper());         info.AddValue("dataItemTwo", dataItemTwo.ToUpper());     } } [Serializable] class MoreData {     public string dataItemOne, dataItemTwo;     [OnSerializing]     internal void OnSerializing(StreamingContext context) {         dataItemOne = dataItemOne.ToUpper();         dataItemTwo = dataItemTwo.ToUpper();     }     [OnDeserialized]     internal void OnDeserialized(StreamingContext context) {         dataItemOne = dataItemOne.ToLower();         dataItemTwo = dataItemTwo.ToLower();     } } class Program {     static void Main(string[] args) {         MyStringData sd = new MyStringData();         sd.dataItemOne = "some data.";         sd.dataItemTwo = "some more data";         Stream s = new FileStream("MyData.soap",         FileMode.Create, FileAccess.Write, FileShare.None);         SoapFormatter sf = new SoapFormatter();         sf.Serialize(s, sd);         s.Close();         s = File.OpenRead("MyData.soap");         sd = (MyStringData)sf.Deserialize(s);         Console.WriteLine("Item 1: {0}", sd.dataItemOne);         Console.WriteLine("Item 2: {0}", sd.dataItemTwo);         MoreData md = new MoreData();         md.dataItemOne = "1, 2, 3.";         md.dataItemTwo = "One more test...";         s = new FileStream("MoreData.soap",FileMode.Create, FileAccess.Write, FileShare.None);         sf = new SoapFormatter();         sf.Serialize(s, md);         s.Close();         s = File.OpenRead("MoreData.soap");         md = (MoreData)sf.Deserialize(s);         Console.WriteLine("Item 1: {0}", md.dataItemOne);         Console.WriteLine("Item 2: {0}", md.dataItemTwo);     } }