¿Cómo / por qué XmlSerializer trata una clase de manera diferente cuando implementa IList <T>?

XmlSerializer esta llamandoIList<T>.Add() en mi clase y no entiendo por qué.

Tengo una clase personalizada (una de varias clases en una jerarquía) que contiene datos que estoy convirtiendo ay desde XML usandoXmlSerializer. En una versión anterior de mi código, estas clases no implementaban ninguna interfaz, y la serialización y deserialización XML parecían funcionar como se esperaba.

Ahora estoy trabajando en otro código que usa los datos contenidos en esta clase, y pensé que sería útil si pudiera acceder a los datos a través deIList<T> interfaz, así que modifiqué mi clase para implementar esa interfaz. (La "T" en este caso es otra de mis clases personalizadas). Esto no implicó agregar ningún campo nuevo a la clase; Implementé todo elmétodos y propiedades requeridos en términos de datos que ya se estaban almacenando.

Esperaba que esto no afectara la serialización de ninguna manera. Sin embargo, al deserializar datos XML en mi clase, algo ahora llama al nuevoAdd() método que implementé como parte de laIList<T> interfaz (que es un problema porque esta lista particularIsReadOnly y entoncesAdd() arroja unNotSupportedException)

Esto sucede incluso cuando el nodo XML para mi clase es simplemente<myClass/> sin atributos XML o hijos en absoluto; elXmlSerializer aparentemente sigue creando un nuevomyOtherClass (que no se menciona en ninguna parte del documento XML) e intentaAdd() a lamyClass.

Tengo problemas para buscar información en esto, porque la mayoría de las preguntas que involucranXmlSerializer yIList<T> parece involucrar a personas que intentan serializar / deserializar una variable de tipoIList<T>. Esa NO es mi situación; No tengo variables de tipoIList<T> en cualquier parte del código. Mi clase serializa y deserializa muy bien si NO implemento elIList<T> interfaz.

¿Alguien puede explicarme por quéXmlSerializer esta llamandoIList<T>.Add() en mi clase y / o cómo hacer que pare?

Idealmente, las sugerencias deberían ser compatibles con este código que finalmente se ejecuta dentro de Unity3d (.NET 2.0).

Respuestas a la pregunta(2)

Su respuesta a la pregunta