Это действительно интересный вопрос. После проверки кода сериализации с помощью Reflector, я думаю, что в общем случае нет хорошего решения, если указанный класс использует IDeserializationCallback.
Вероятно, вы видели, что есть два других способа запустить некоторый код во время десериализации, атрибуты [OnDeserializing] и [OnDeserialized]. К сожалению, оба запускаются до IDeserializationCallback.OnDeserialization (). Это порядок выполнения методов, если у вас есть class1, который ссылается на class2:
Class1: [OnDeserializing]
Class2: [OnDeserializing]
Class2: [OnDeserialized]
Class1: [OnDeserialized]
Class1: IDeserializationCallback.OnDeserialization
Class2: IDeserializationCallback.OnDeserialization
Как видите, атрибуты [OnDeserializing] и [OnDeserialized] работают согласованно, но методы IDeserializationCallback не совсем ...: (
Я также проверил реализацию OnDeserialization для Hashtable и Dictionary, и оба они безопасны для вызова OnDeserialization более одного раза (только первый вызов выполнит необходимую операцию, последующие вызовы ничего не сделают).
Итак, наконец, вы должны вызвать OnDeserialization () Hashtable, как Шон и Брайан предложили.