using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
[Serializable]
public class CustomClass1<T> : ISerializable {
private int _intData;
private string _stringData;
private T _genericData;
public CustomClass1() { }
private CustomClass1(SerializationInfo serInfo, StreamingContext context) {
_intData = (int)serInfo.GetValue("_intData", typeof(int));
_stringData = (string)serInfo.GetValue("_stringData", typeof(string));
_genericData = (T)serInfo.GetValue("_genericData", typeof(T));
}
public CustomClass1(int intData, string stringData, T genericType) {
this._intData = intData;
this._stringData = stringData;
this._genericData = genericType;
}
public void GetObjectData(SerializationInfo serInfo, StreamingContext context) {
serInfo.AddValue("_intData", _intData);
serInfo.AddValue("_stringData", _stringData);
serInfo.AddValue("_genericData", _genericData, _genericData.GetType());
}
public int IntVal {
get { return this._intData; }
}
public string StrVal {
get { return this._stringData; }
}
public T GenericVal {
get { return this._genericData; }
}
}
public class MainClass{
public static void Main(){
CustomClass1<Double> doubleClass;
doubleClass = new CustomClass1<Double>(111, "Value1", 939.99);
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, doubleClass);
stream.Seek(0, SeekOrigin.Begin);
CustomClass1<Double> newClass = (CustomClass1<Double>)formatter.Deserialize(stream);
Console.Out.WriteLine("Int Data Member : {0}", newClass.IntVal);
Console.Out.WriteLine("String Data Member : {0}", newClass.StrVal);
Console.Out.WriteLine("Generic Data Member : {0}", newClass.GenericVal);
}
}