Mega Code Archive

 
Categories / C# / XML
 

Control Serialization of Derived Classes

using System; using System.Linq; using System.Xml; using System.Xml.Serialization; using System.Xml.Linq; using System.Collections; using System.Collections.Generic; using System.Xml.XPath; using System.IO; public class Orders {     public Book[] Books; } public class Book {     public string ISBN; } public class ExpandedBook : Book {     public bool NewEdition; } public class Run {     public static void Main(){}     public void SerializeObject(string filename)     {         XmlAttributes attrs = new XmlAttributes();         XmlElementAttribute attr = new XmlElementAttribute();         attr.ElementName = "NewBook";         attr.Type = typeof(ExpandedBook);         attrs.XmlElements.Add(attr);         XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();         attrOverrides.Add(typeof(Orders), "Books", attrs);         XmlSerializer s = new XmlSerializer(typeof(Orders), attrOverrides);         TextWriter writer = new StreamWriter(filename);         Orders myOrders = new Orders();         ExpandedBook b = new ExpandedBook();         b.ISBN = "123456789";         b.NewEdition = true;         myOrders.Books = new ExpandedBook[] { b };         s.Serialize(writer, myOrders);         writer.Close();     }     public void DeserializeObject(string filename)     {         XmlAttributeOverrides attrOverrides = new XmlAttributeOverrides();         XmlAttributes attrs = new XmlAttributes();         XmlElementAttribute attr = new XmlElementAttribute();         attr.ElementName = "NewBook";         attr.Type = typeof(ExpandedBook);         attrs.XmlElements.Add(attr);         attrOverrides.Add(typeof(Orders), "Books", attrs);         XmlSerializer s = new XmlSerializer(typeof(Orders), attrOverrides);         FileStream fs = new FileStream(filename, FileMode.Open);         Orders myOrders = (Orders)s.Deserialize(fs);         Console.WriteLine("ExpandedBook:");         ExpandedBook expanded;         foreach (Book b in myOrders.Books)         {             expanded = (ExpandedBook)b;             Console.WriteLine(expanded.ISBN + "\n" + expanded.NewEdition);         }     } }