Blog Post : Using XmlSerializer with external serializable types
Listing 5 : Proxy serialization class source code
  1. public class ExternDataSerializer : IXmlSerializable  
  2. {  
  3.     private AppData.Interface.ExternData @object;  
  4.     public AppData.Interface.ExternData Object  
  5.     {  
  6.         get { return @object; }  
  7.         private set { @object = value; }  
  8.     }  
  9.     public static implicit operator ExternDataSerializer(AppData.Interface.ExternData extData)  
  10.     {  
  11.         return extData == null ? null : new ExternDataSerializer(extData);  
  12.     }  
  13.     public static implicit operator AppData.Interface.ExternData(ExternDataSerializer sr)  
  14.     {  
  15.         return sr == null ? null : sr.Object;  
  16.     }  
  17.     public ExternDataSerializer() { }  
  18.     public ExternDataSerializer(AppData.Interface.ExternData extData)  
  19.     {  
  20.         Object = extData;  
  21.     }  
  22.     #region IXmlSerializable Members  
  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 = (AppData.Interface.ExternData) 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  
  40. }