public Delegate DeserializeDelegate (SerializationInfo info, int index) { object realTarget = null; if (target != null) realTarget = info.GetValue (target.ToString(), typeof(object)); var key = "method" + index; var method = info.HasKey (key) ? (MethodInfo)info.GetValue (key, typeof (MethodInfo)) : null; Assembly dasm = Assembly.Load (assembly); Type dt = dasm.GetType (type); if (realTarget != null) { #if !DISABLE_REMOTING if (RemotingServices.IsTransparentProxy (realTarget)) { // The call to IsInstanceOfType will force the proxy // to load the real type of the remote object. This is // needed to make sure that subsequent calls to // GetType() return the expected type. Assembly tasm = Assembly.Load (targetTypeAssembly); Type tt = tasm.GetType (targetTypeName); if (!tt.IsInstanceOfType (realTarget)) throw new RemotingException ("Unexpected proxy type."); } #endif return method == null ? Delegate.CreateDelegate (dt, realTarget, methodName) : Delegate.CreateDelegate (dt, realTarget, method); } if (method != null) return Delegate.CreateDelegate (dt, realTarget, method); Type tt2 = Assembly.Load (targetTypeAssembly).GetType (targetTypeName); return Delegate.CreateDelegate (dt, tt2, methodName); }