Wie man das XmlInclude-Attribut dynamisch hinzufügt

Ich habe die folgenden Klassen

[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);
    }    
}

Nun, wenn ich versuche, den Code auszuführen, erhalte ich in der letzten Zeile eine InvalidOperationException, die besagt, dass

Der Typ XmlTest.C wurde nicht erwartet. Verwenden Sie das Attribut "XmlInclude" oder "SoapInclude", um Typen anzugeben, die statisch nicht bekannt sind.

Ich weiß, dass das Hinzufügen eines Attributs [XmlInclude (typeof (C))] mit [XmlRoot] das Problem lösen würde. Aber ich möchte es dynamisch erreichen. Denn in meinem Projekt ist Klasse C vor dem Laden nicht bekannt. Klasse C wird als Plugin geladen, daher kann ich dort kein XmlInclude-Attribut hinzufügen.

Ich habe es auch mit @ versuc

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

Vo

var type = typeof (AList);

aber keine Verwendung. Es gibt immer noch die gleiche Ausnahme.

Hat jemand eine Idee, wie man es erreicht?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage