Blog Post :
Using XmlSerializer with external serializable types
Listing 6 : Parameterized proxy serialization class source code
public
class
ExternDataSerializer<T> : IXmlSerializable
{
private
T @
object
;
public
T Object
{
get
{
return
@
object
; }
private
set
{ @
object
= value; }
}
public
static
implicit
operator
ExternDataSerializer<T>(T t)
{
return
t ==
null
?
null
:
new
ExternDataSerializer<T>(t);
}
public
static
implicit
operator
T(ExternDataSerializer<T> t)
{
return
t.Equals(
default
(T)) ?
default
(T) : t.Object;
}
public
ExternDataSerializer() { }
public
ExternDataSerializer(T t)
{
Object = t;
}
#region IXmlSerializable Implementation
XmlSchema IXmlSerializable.GetSchema()
{
return
null
;
}
void
IXmlSerializable.ReadXml(XmlReader reader)
{
Type type = Type.GetType(reader.GetAttribute(
"Type"
));
reader.ReadStartElement();
Object = (T)
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 IXmlSerializable Implementation
}