문제

나는 Maintans에게 해시 가능에 대한 참조를하고 해시 가능을 일련화/사형화하는 수업이 있습니다. SerializationInfo.getValue를 호출 한 후, 해시 가능은 Ideserialization Calback 동안 사막화가 발생하기 때문에 완전히 사막화되지 않습니다.

Hashtable hashtable = (Hashtable) info.GetValue("hash", typeof(Hashtable));

또한 상위 클래스에서 Ideserialization 콜백을 구현했지만 해시 가능도 아직 완전히 사막화되지 않았습니다. 내부에서 사막화가 일어나고 있다면 나는 그것이 될 것으로 예상했다.

내 질문은, 부모 클래스의 ondeserialization 메소드에서 hashtable.ondeserialization을 설명하여 그 시점에서 그것을 열거 할 수 있도록 안전하게 호출하는 것이 안전합니까?

public virtual void OnDeserialization(object sender)
{
    hashtable.OnDeserialization(sender);
}
도움이 되었습니까?

해결책

이것은 정말 흥미로운 문제입니다. 리플렉터로 직렬화 코드를 확인한 후, 추천 클래스가 ideSerializationCallback을 사용하는 경우 일반적으로 좋은 Soluiton이 없다고 생각합니다.

아마도 당신은 아마도 사막화 중에 코드를 실행하는 다른 두 가지 방법, [ondeserializing] 및 [ondeserialized] 속성이 있음을 알았을 것입니다. 불행히도 둘 다 ideSerializationCallback.ondeserialization () 전에 실행됩니다. Class2를 나타내는 클래스 1이있는 경우 메소드의 실행 순서입니다.

Class1: [OnDeserializing]
Class2: [OnDeserializing]
Class2: [OnDeserialized]
Class1: [OnDeserialized]
Class1: IDeserializationCallback.OnDeserialization
Class2: IDeserializationCallback.OnDeserialization

보시다시피, [ondeserializing]과 [ondeserialized] 속성은 일관성이 있지만 IdeserializationCallback 방법은 실제로 ... :(

또한 해시 테이블 및 사전의 ondeserialization 구현을 확인했으며, 둘 다 온도 화를 한 번 이상 호출하는 데 안전한 것 같습니다 (첫 번째 호출 만 필요한 작업을 수행하면 후속 통화는 아무것도하지 않습니다).

마지막으로, 당신은 hashtable의 ondeserialization ()를 호출해야합니다. 그리고 브라이언은 제안했다.

다른 팁

나는 당신이 이미 Googled를했다고 생각하지만 나는 이것 어제 패턴.

public BoringClass(SerializationInfo info, StreamingContext context)
{
    Hashtable hashtable = (Hashtable) info.GetValue("hash", typeof(Hashtable));
    hashtable.OnDeserialization(this);

    Console.WriteLine("Value is: " + hashtable["testItem"]);

}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top