Có một số phép thuật xảy ra với WCF deserialization. Làm thế nào để nó khởi tạo một thể hiện của kiểu hợp đồng dữ liệu mà không cần gọi hàm tạo của nó?Làm thế nào để WCF deserialization nhanh chóng đối tượng mà không cần gọi một constructor?
Ví dụ, hãy xem xét hợp đồng dữ liệu này:
[DataContract]
public sealed class CreateMe
{
[DataMember] private readonly string _name;
[DataMember] private readonly int _age;
private readonly bool _wasConstructorCalled;
public CreateMe()
{
_wasConstructorCalled = true;
}
// ... other members here
}
Khi lấy một thể hiện của đối tượng này thông qua DataContractSerializer
bạn sẽ thấy rằng trường _wasConstructorCalled
là false
.
Vậy WCF làm như thế nào? Đây có phải là một kỹ thuật mà những người khác có thể sử dụng quá, hoặc là nó ẩn xa chúng ta?
Vâng, trước đây tôi đã đăng câu trả lời sai (hiện đã bị xóa) nên tôi cảm thấy có lỗi. Không có gì như bầm bầm một lập trình bản ngã để có được anh ta để làm một số nghiên cứu. –
Có ai khác đang tự hỏi không, FormatterServices.GetUninitializedObject hoạt động như thế nào? Phản ánh? – harpo
Nếu tôi gọi lại cuộc gọi của mình thành mã gốc. Tôi không thể làm theo điều này xa hơn nữa trong hố thỏ với Reflector. –