using System.Collections.Generic;
using System.Xml.Serialization;
public string Name{get;set;}
public class Item2 : Item
public string Value {get;set;}
public class Item3 : Item
public string Desc {get;set;}
[XmlElement("Item2", typeof(Item2))]
[XmlElement("Item3", typeof(Item3))]
public List<Item> Items {get;set;}
public XmlElement[] Any{get;set;}
public static void Main()
string xml = "<Root><Item2 Name=\"Owner\" Value=\"55\"></Item2><Item3 Name=\"Two\" Desc=\"DESCRIPTION\"></Item3><t1></t1><t2></t2></Root>";
using (var memStream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
using (var reader = new XmlTextReader(memStream))
var serializator = new XmlSerializer(typeof(TestClass));
var deserializedEntity = (TestClass)serializator.Deserialize(reader);
Console.WriteLine("Result is null: {0}", deserializedEntity == null);
Console.WriteLine(deserializedEntity.Items.Count);
deserializedEntity.Items.ToList().ForEach(item => Console.WriteLine(item.GetType()));
deserializedEntity.Items.ToList().ForEach(item => Console.WriteLine(item.Name));
deserializedEntity.Any.ToList().ForEach(item => Console.WriteLine(item.LocalName));