DataContractSerializer nie wywołuje mojego konstruktora?

Właśnie zdałem sobie sprawę z czegoś zwariowanego, co uważałem za całkowicie niemożliwe: podczas deserializacji obiektu,DataContractSerializer nie wywołuje konstruktora !

Weźmy na przykład tę klasę:

[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; }
}

Gdy deserializuję obiekt tej klasy, punkt przerwania nie jest trafiany. Nie mam absolutnie pojęcia, jak to możliwe, ponieważ jest to jedyny konstruktor tego obiektu!

Założyłem, że kompilator może wygenerować dodatkowy konstruktor z powoduDataContract atrybut, ale nie mogłem go znaleźć przez odbicie ...

Tak więc chciałbym wiedzieć, że: w jaki sposób można utworzyć instancję mojej klasy bez wywoływania konstruktora?

UWAGA: Wiem, że mogę użyćOnDeserializing atrybut, aby zainicjować mój obiekt po rozpoczęciu deserializacji, nie jest to temat mojego pytania.

questionAnswers(2)

yourAnswerToTheQuestion