저는 완전히 불가능하다고 생각했습니다. 객체를 비 직렬화 할 때 DataContractSerializer가 생성자를 호출하지 않습니다.! 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
특성을 사용하여 개체를 초기화 할 수 있다는 것을 알고 있습니다. 이것은 제 질문의 주제가 아닙니다.
또는 "OnDeserialized", 개체가 deserializing을 마쳤을 때 누락 된 필드를 채 웁니다. –
이 질문은 내 마음도 넘어 섰다 : http://stackoverflow.com/questions/178645/how-does-wcf-deserialization-instantiate-objects-without-calling-a-constructor –