2012-12-01 5 views
3

기본 클래스는 Serializable이고, 파생 클래스는 Serializable으로 표시되어 있습니다. deserialization 중에 기본 클래스에서 무언가를 수행하고 싶습니다. 따라서 OnDeserializing으로 표시된 메서드를 선언했지만이 메서드는 파생 클래스의 OnDeserializing 메서드보다 먼저 실행해야합니다.
파생 클래스는 다른 사용자도 작성할 수 있습니다.
파생 클래스에서 모든 serialization 메서드보다 먼저 기본 클래스의 메서드를 호출 할 수 있습니까?
SoapFormatter을 사용할 예정입니다.상속 트리를 통한 직렬화 해제 순서

+0

IFormatter를 사용하고 있습니다. 몇 가지 이유로 XmlSerializer와 같은 직렬화기를 사용할 수 없습니다. – RoadBump

+0

또 다른 유용한 질문 [여기] (http://stackoverflow.com/questions/4023644/can-ondeserializedattribute-be-used-instead-of-ideserializationcallback-interfac). 내 테스트에서 주문은'Base.OnDeserializing','Derived.OnDeserializing','Base.OnDeserialized','Derived.OnDeserialized'이지만, 객체 그래프의 정확한 구조에 의존 할 수 있습니다. – RoadBump

답변

2

저는 사지에 나가서 다른 목적으로 리플렉션을 사용하여 보았던 것을 기반으로하는 기본 방법보다는 파생 된 방법을 먼저 찾아 낼 것이라고 말합니다. 속성으로 표시된 메소드의 순서에 의존하지 않고 자식으로부터 기본 동작을 명시 적으로 호출하고자 할 수도 있습니다. 하위 수준의 개체가 추상이 아닌 직접 인스턴스화 가능하고 OnDeserializing이 표시된 메서드가있을 수있는 경우 해당 수준이 이미 처리되었는지 여부를 나타내는 플래그를 설정해야 할 수도 있습니다.

+0

작성하는 것을 잊었지만 파생 클래스는 다른 사람들이 만들 수 있으므로 제어 할 수 없습니다. 어쨌든 중요한 정보를 가져 주셔서 감사합니다. 매우 도움이됩니다. – RoadBump

+0

@RoadBump 명시 적으로 기본 클래스 코드를 호출하는 것을 포함하여 상속 클래스에 제어를 부여하는 방식으로 재정의 할 수있는 단일 메서드를 사용하는 것이 좋습니다. – tvanfosson

+0

좋은 생각 같네요. 나는 특별한 생성자를 필요로하는'ISerializable' 인터페이스를 구현할 것을 고려했다. [here] (http://www.diranieh.com/netserialization/binaryserialization.htm#Custom%20Serialization)를 보라. 생성자를 사용하면 파생 클래스의 직렬화에 앞서 기본 클래스의 ctor가 호출 될 것입니까? – RoadBump