Как динамически добавить атрибут XmlInclude

У меня есть следующие классы

[XmlRoot]
public class AList
{
   public List<B> ListOfBs {get; set;}
}

public class B
{
   public string BaseProperty {get; set;}
}

public class C : B
{
    public string SomeProperty {get; set;}
}

public class Main
{
    public static void Main(string[] args)
    {
        var aList = new AList();
        aList.ListOfBs = new List<B>();
        var c = new C { BaseProperty = "Base", SomeProperty = "Some" };
        aList.ListOfBs.Add(c);

        var type = typeof (AList);
        var serializer = new XmlSerializer(type);
        TextWriter w = new StringWriter();
        serializer.Serialize(w, aList);
    }    
}

Теперь, когда я пытаюсь запустить код, я получил InvalidOperationException в последней строке, говоря, что

Тип XmlTest.C не ожидался. Используйте атрибут XmlInclude или SoapInclude, чтобы указать типы, которые не известны статически.

Я знаю, что добавление атрибута [XmlInclude (typeof (C))] с помощью [XmlRoot] решит проблему. Но я хочу добиться этого динамически. Потому что в моем проекте класс C не известен до загрузки. Класс C загружается как плагин, поэтому я не могу добавить туда атрибут XmlInclude.

Я пробовал также с

TypeDescriptor.AddAttributes(typeof(AList), new[] { new XmlIncludeAttribute(c.GetType()) });

до

var type = typeof (AList);

но бесполезно. Это все еще дает то же исключение.

Есть ли у кого-нибудь идеи о том, как этого добиться?

Ответы на вопрос(4)

Ваш ответ на вопрос