Wie / warum behandelt XmlSerializer eine Klasse anders, wenn IList <T> implementiert wird?

XmlSerializer ruft anIList<T>.Add() in meiner Klasse und ich verstehe nicht warum.

Ich habe eine benutzerdefinierte Klasse (eine von mehreren Klassen in einer Hierarchie), die Daten enthält, die ich mit @ in und aus XML konvertierXmlSerializer. In einer früheren Version meines Codes haben diese Klassen keine Schnittstellen implementiert, und sowohl die XML-Serialisierung als auch die Deserialisierung schienen wie erwartet zu funktionieren.

Ich arbeite gerade an einem anderen Code, der die in dieser Klasse enthaltenen Daten verwendet, und ich dachte, es wäre hilfreich, wenn ich über @ auf die Daten zugreifen könntIList<T> interface, also habe ich meine Klasse geändert, um diese Schnittstelle zu implementieren. (Das "T" in diesem Fall ist eine andere meiner benutzerdefinierten Klassen.) Dabei wurden der Klasse keine neuen Felder hinzugefügt. Ich implementierte alle Erforderliche Methoden und Eigenschaften in Bezug auf Daten, die bereits gespeichert wurden.

Ich hatte gehofft, dass dies die Serialisierung in keiner Weise beeinflussen würde. Beim Deserialisieren von XML-Daten in meine Klasse wird jetzt jedoch das neue @ aufgerufeAdd() -Methode, die ich als Teil des @ implementiert haIList<T> Schnittstelle (was ein Problem ist, weil diese bestimmte ListeIsReadOnly und soAdd() wirft einNotSupportedException).

Dies passiert auch dann, wenn der XML-Knoten für meine Klasse einfach @ is<myClass/> ohne XML-Attribute oder untergeordnete Elemente; dasXmlSerializer erstellt offenbar noch ein neuesmyOtherClass (der im XML-Dokument nirgends benannt ist) und versucht,Add() es zummyClass.

Ich habe Probleme bei der Suche nach Informationen, da die meisten Fragen zuXmlSerializer undIList<T> scheinen Leute mit einzubeziehen, die versuchen, eine Variable vom Typ @ zu serialisieren / zu deserialisiereIList<T>. Das ist NICHT meine Situation; Ich habe keine Variablen vom TypIList<T> irgendwo im Code. Meine Klasse serialisiert und deserialisiert einwandfrei, wenn ich das @ NICHT implementierIList<T> interface.

Kann mir jemand erklären, warumXmlSerializer ruft anIList<T>.Add() in meiner Klasse und / oder wie soll ich damit aufhören?

Vorschläge sollten idealerweise mit diesem Code kompatibel sein, der möglicherweise in Unity3d (.NET 2.0) ausgeführt wird.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage