Blog Post : Using XmlSerializer with external serializable types
Listing 6 : Parameterized proxy serialization class source code
  1. public class ExternDataSerializer<T> : IXmlSerializable  
  2. {  
  3.     private T @object;  
  4.     public T Object  
  5.     {  
  6.         get { return @object; }  
  7.         private set { @object = value; }  
  8.     }  
  9.     public static implicit operator ExternDataSerializer<T>(T t)  
  10.     {  
  11.         return t == null ? null : new ExternDataSerializer<T>(t);  
  12.     }  
  13.     public static implicit operator T(ExternDataSerializer<T> t)  
  14.     {  
  15.         return t.Equals(default(T)) ? default(T) : t.Object;  
  16.     }  
  17.     public ExternDataSerializer() { }  
  18.     public ExternDataSerializer(T t)  
  19.     {  
  20.         Object = t;  
  21.     }  
  22.     #region IXmlSerializable Implementation  
  23.     XmlSchema IXmlSerializable.GetSchema()  
  24.     {  
  25.         return null;  
  26.     }  
  27.     void IXmlSerializable.ReadXml(XmlReader reader)  
  28.     {  
  29.         Type type = Type.GetType(reader.GetAttribute("Type"));  
  30.         reader.ReadStartElement();  
  31.         Object = (T)new XmlSerializer(type).Deserialize(reader);  
  32.         reader.ReadEndElement();  
  33.     }  
  34.     void IXmlSerializable.WriteXml(XmlWriter writer)  
  35.     {  
  36.         writer.WriteAttributeString("Type", Object.GetType().AssemblyQualifiedName);  
  37.         new XmlSerializer(Object.GetType()).Serialize(writer, Object);  
  38.     }  
  39.     #endregion IXmlSerializable Implementation  
  40. }