Blog Post :
Using XmlSerializer with external serializable types
Listing 1 : Simple extensible serializable and serialization support class source code
namespace
ExtData
{
using
System;
using
System.IO;
using
System.Text;
using
System.Collections;
using
System.Xml;
using
System.Xml.Schema;
using
System.Xml.Serialization;
[System.Xml.Serialization.XmlRootAttribute(
"ExtensibleData"
, Namespace=
""
, IsNullable=
false
)]
public
partial
class
ExtensibleDataType
{
private
string
name;
private
string
description;
private
object
externData;
private
string
id;
[System.Xml.Serialization.XmlElementAttribute(
"Name"
)]
public
string
Name
{
get
{
return
name; }
set
{ name = value; }
}
[System.Xml.Serialization.XmlElementAttribute(
"Description"
)]
public
string
Description
{
get
{
return
description; }
set
{ description = value; }
}
[System.Xml.Serialization.XmlElementAttribute(
"ExternData"
)]
public
object
ExternData
{
get
{
return
externData; }
set
{ externData = value; }
}
[System.Xml.Serialization.XmlAttributeAttribute(
"ID"
)]
public
string
ID
{
get
{
return
id; }
set
{ id = value; }
}
public
virtual
string
Xml
{
get
{
return
Serializer.ToXml(
this
,
this
.GetType()); }
}
public
static
ExtensibleDataType FromXml(
string
xml)
{
return
((ExtensibleDataType)(Serializer.FromXml(xml,
typeof
(ExtensibleDataType))));
}
[System.Xml.Serialization.XmlAttributeAttribute(Namespace =
"http://www.w3.org/2001/XMLSchema-instance"
)]
public
virtual
string
noNamespaceSchemaLocation
{
get
{
return
"ExtData.xsd"
; }
set
{}
}
}
public
class
Serializer
{
public
static
string
ToXml(
object
obj, Type type)
{
XmlSerializer serializer =
new
XmlSerializer(type);
MemoryStream stream =
new
MemoryStream();
UTF8Encoding encoding =
new
UTF8Encoding(
false
);
XmlTextWriter writer =
new
XmlTextWriter(stream, encoding);
if
(PrettyPrint)
{
writer.Formatting = Formatting.Indented;
writer.Indentation = 1;
writer.IndentChar = Convert.ToChar(9);
}
serializer.Serialize(writer, obj);
string
xml = encoding.GetString(stream.GetBuffer(), 0, (
int
)stream.Length);
writer.Close();
stream.Close();
return
xml;
}
public
static
object
FromXml(
string
xml, Type type)
{
XmlSerializer serializer =
new
XmlSerializer(type);
MemoryStream stream =
new
MemoryStream(Encoding.UTF8.GetBytes(xml));
object
obj = serializer.Deserialize(stream);
stream.Close();
return
obj;
}
private
static
bool
prettyPrint;
public
static
bool
PrettyPrint
{
get
{
return
prettyPrint; }
set
{ prettyPrint = value; }
}
}
}