Если вы добавите атрибут KnownType (из System.Runtime.Serialization) в базовый класс для дочернего класса, он будет работать:
[KnownType(typeof(Child))]
class Base
{}
class Child : Base
{}
Это необходимо, потому что сериализатор не загружает ваш дочерний тип, когда вы настраиваете его для сериализации базового класса (по крайней мере, это мое понимание).