我刚刚意识到一些疯狂的事情,我认为这是完全不可能的:当反序列化一个对象时,DataContractSerializer doesn't call the constructor!
以这门课为例:
[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
属性生成了一个额外的构造函数,但我无法通过反射找到它...
所以,我想知道的是:如果不调用构造函数,如何创建我的类的实例??
NOTE: I know that I can use the 100 attribute to initialize my object when deserialization begins, this is not the subject of my question.