Я только что понял что-то сумасшедшее, что я предполагал совершенно невозможным: при десериализации объекта DataContractSerializer не вызывает конструктор!
Возьмите этот класс, например:
[DataContract]
public class Book
{
public Book()
{ // breakpoint here
}
[DataMember(Order = 0)]
public string Title { get; set; }
[DataMember(Order = 1)]
public string Author { get; set; }
[DataMember(Order = 2)]
public string Summary { get; set; }
}
Когда я десериализую объект этого класса, точка останова не попадает. Я не знаю, как это возможно, поскольку это единственный конструктор для этого объекта!
Я предположил, что, возможно, дополнительный компилятор был создан компилятором из-за атрибута DataContract
, но я не смог найти его через отражение...
Итак, мне хотелось бы знать следующее: как создать экземпляр моего класса без вызова конструктора
ПРИМЕЧАНИЕ. Я знаю, что я могу использовать атрибут OnDeserializing
для инициализации моего объекта при начале десериализации, это не вопрос моего вопроса.