using System.Collections.Generic;
using System.Xml.Serialization;
public static void Main()
var xml = @"<?xml version=""1.0"" encoding=""utf-16""?>
<PurchaseOrder xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
XmlSerializer serializer = new XmlSerializer(typeof(PurchaseOrder));
var items = (PurchaseOrder)serializer.Deserialize(new StringReader(xml));
Console.WriteLine((items.ItemsOrders[1] as Item2).two);
var po = new PurchaseOrder();
po.ItemsOrders.Add(new Item2() {
System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(po.GetType());
x.Serialize(Console.Out,po);
public class PurchaseOrder
[XmlElement(ElementName="Item1", Type=typeof(Item1))]
[XmlElement(ElementName="Item2", Type=typeof(Item2))]
public List<Item> ItemsOrders = new List<Item>();
[XmlInclude(typeof(Item1))]
[XmlInclude(typeof(Item2))]
public abstract class Item
public class Item1 : Item
public int one {get;set;}
public class Item2 : Item
public int two {get;set;}