2015-06-02 2 views
0

У меня есть класс, который содержит список. В своем конструкторе я добавляю объект по умолчанию в список.Xml deserialize делает нежелательную инициализацию

class A 
{ 
    List<B> list; 
    public A() 
    { 
     list = new List<B>(); 
     B b = new B(); 
     list.Add(b); 
    } 
} 

Но, кажется, когда XmlSerializer десериализации файл XML, содержащий A объект, загруженный объект имеет два B объекта в списке. Думаю, он снова называет конструктор и конструктор добавляет следующий B

Почему это происходит? Как я могу избежать этого?

+1

Когда он десериализует, он вызывает конструктор по умолчанию, который в вашем случае добавляет объект 'B'. ** Затем ** он преобразовывает все * свойства * в свои десериализованные значения, то есть добавляет * второй * 'B' объект (с' list.Add'). Ваш конструктор должен ** не ** добавлять элемент в список, если хотите, чтобы это не происходило. –

ответ

1

Попробуйте перегруженный конструктор. Он ничего не принимает и ничего не добавляет к списку, что можно использовать при десериализации. Другой принимает значение B и добавляет B в список.