using System.Xml.Serialization;
using System.Collections.Generic;
public static void Main()
var xml = "<Job Name=\"test\"><Pages><MainPage Name=\"page1\"></MainPage></Pages></Job>";
MemoryStream str = new MemoryStream();
StreamWriter writer = new StreamWriter(str);
var serializer = new XmlSerializer(typeof(Job));
var job = (Job)serializer.Deserialize(str);
Console.WriteLine(job.Pages[0].GetType().Name);
public string Name { get; set; }
public List<PageBase> Pages { get; set; }
[XmlInclude(typeof(MainPage))]
[XmlInclude(typeof(SubPage))]
public abstract class PageBase
public string Name { get; set; }
public class MainPage : PageBase
public class SubPage : PageBase