Tôi vừa mới nhận ra điều gì đó điên rồ, mà tôi cho là hoàn toàn không thể: khi deserializing một đối tượng, DataContractSerializer không gọi hàm tạo!DataContractSerializer không gọi hàm tạo của tôi?
Đi lớp này, ví dụ:
[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; }
}
Khi tôi deserialize một đối tượng của lớp đó, breakpoint không phải là hit. Tôi hoàn toàn không có ý tưởng làm thế nào nó có thể, vì nó là nhà xây dựng duy nhất cho đối tượng này!
Tôi cho rằng có lẽ một nhà xây dựng bổ sung được tạo ra bởi trình biên dịch do đặc tính DataContract
, nhưng tôi không thể tìm thấy nó thông qua phản ánh ...
Vì vậy, những gì tôi muốn biết là thế này: làm thế nào có thể một thể hiện của lớp học của tôi được tạo ra mà không có constructor được gọi là ??
LƯU Ý: Tôi biết rằng tôi có thể sử dụng thuộc tính OnDeserializing
để khởi tạo đối tượng của mình khi bắt đầu quá trình deserialization, đây không phải là chủ đề của câu hỏi của tôi.
hoặc "OnDeserialized", khi đối tượng được thực hiện deserializing, để điền vào các trường bị thiếu. –
Câu hỏi này cũng đã vượt qua tâm trí của tôi: http://stackoverflow.com/questions/178645/how-does-wcf-deserialization-instantiate-objects-without-calling-a-constructor –