Blog Post :
Using XmlSerializer with external serializable types
Listing 5 : Proxy serialization class source code
public
class
ExternDataSerializer : IXmlSerializable
{
private
AppData.Interface.ExternData @
object
;
public
AppData.Interface.ExternData Object
{
get
{
return
@
object
; }
private
set
{ @
object
= value; }
}
public
static
implicit
operator
ExternDataSerializer(AppData.Interface.ExternData extData)
{
return
extData ==
null
?
null
:
new
ExternDataSerializer(extData);
}
public
static
implicit
operator
AppData.Interface.ExternData(ExternDataSerializer sr)
{
return
sr ==
null
?
null
: sr.Object;
}
public
ExternDataSerializer() { }
public
ExternDataSerializer(AppData.Interface.ExternData extData)
{
Object = extData;
}
#region IXmlSerializable Members
XmlSchema IXmlSerializable.GetSchema()
{
return
null
;
}
void
IXmlSerializable.ReadXml(XmlReader reader)
{
Type type = Type.GetType(reader.GetAttribute(
"Type"
));
reader.ReadStartElement();
Object = (AppData.Interface.ExternData)
new
XmlSerializer(type).Deserialize(reader);
reader.ReadEndElement();
}
void
IXmlSerializable.WriteXml(XmlWriter writer)
{
writer.WriteAttributeString(
"Type"
, Object.GetType().AssemblyQualifiedName);
new
XmlSerializer(Object.GetType()).Serialize(writer, Object);
}
#endregion
}