Como / por que o XmlSerializer trata uma classe de maneira diferente quando implementa IList <T>?

XmlSerializer está chamandoIList<T>.Add() na minha aula e não entendo o porquê.

Eu tenho uma classe personalizada (uma das várias classes em uma hierarquia) contendo dados que estou convertendo para e do XML usandoXmlSerializer. Em uma versão anterior do meu código, essas classes não implementavam nenhuma interface e a serialização e desserialização de XML pareciam funcionar conforme o esperado.

Agora estou trabalhando em outro código que usa os dados contidos nesta classe e achei que seria útil se eu pudesse acessar os dados por meio doIList<T> interface, então eu modifiquei minha classe para implementar essa interface. (O "T" nesse caso é outra das minhas classes personalizadas.) Isso não envolveu a adição de novos campos à classe; Eu implementei todo ométodos e propriedades necessários em termos de dados que já estavam sendo armazenados.

Eu esperava que isso não afetasse a serialização de forma alguma. No entanto, ao desserializar dados XML em minha classe, algo está chamando o novoAdd() método que eu implementei como parte doIList<T> interface (que é um problema porque esta lista específicaIsReadOnly e entaoAdd() lança umNotSupportedException)

Isso acontece mesmo quando o nó XML da minha classe é simplesmente<myClass/> sem atributos XML ou filhos; aXmlSerializer aparentemente ainda está criando um novomyOtherClass (que não está nomeado em nenhum lugar do documento XML) e tentandoAdd() para omyClass.

Estou tendo problemas para procurar informações, porque a maioria das perguntas que envolvemXmlSerializer eIList<T> parece envolver pessoas tentando serializar / desserializar uma variável do tipoIList<T>. Essa não é a minha situação; Não tenho variáveis do tipoIList<T> em qualquer lugar do código. Minha classe serializa e desserializa muito bem se eu NÃO implementar oIList<T> interface.

Alguém pode me explicar por queXmlSerializer está chamandoIList<T>.Add() na minha classe e / ou como fazê-lo parar?

Idealmente, as sugestões devem ser compatíveis com esse código, eventualmente rodando no Unity3d (.NET 2.0).

questionAnswers(2)

yourAnswerToTheQuestion