C# Tutorial - XML Serialization
Watch out for derived classes, the Xml serializer will not know how to serialize them without being told about them.
For example, a base class is "MenuItemDefinition"
Derived classes are "StartExecutableMenuItem", "RestartExecutableMenuItem"
To serialize instances of the base class, create an XmlSerializer thus:
Watch out for derived classes, the Xml serializer will not know how to serialize them without being told about them.
For example, a base class is "MenuItemDefinition"
Derived classes are "StartExecutableMenuItem", "RestartExecutableMenuItem"
To serialize instances of the base class, create an XmlSerializer thus:
XmlSerializer serializer = new XmlSerializer(
typeof(List<MenuItemDefinition>), // Object type to serialize
// Following list of types are derived class types that the
// XmlSerializer will need to know about to perform the serialization
new Type[] { typeof(StartExecutableMenuItem), typeof(RestartExecutableMenuItem), });
so here is the full serialization:
private void MenuItemsSerialize()
{
IEnumerable<MenuItemDefinition> menuItems = LoadMenuItemDefinitions();
var li = new List<MenuItemDefinition>();
li.AddRange(menuItems);
XmlSerializer serializer = new XmlSerializer(
typeof(List<MenuItemDefinition>), // Object type to serialize
// List of types that are derived class types that the
// XmlSerializer will need to know about to perform the serialization
new Type[] {
typeof(StartExecutableMenuItem),
typeof(RestartExecutableMenuItem), }
);
string path = Path.Combine(Path.GetTempPath(), "delme.xml");
TextWriter textWriter = new StreamWriter(path);
serializer.Serialize(textWriter, li);
textWriter.Close();
}
Alternatively a bunch of XmlInclude attributes on the base class will do the job.