ICSharpCode.NRefactory.Utils.FastSerializer.CreateCustomDeserializationAction C# (CSharp) Method

CreateCustomDeserializationAction() static private method

static private CreateCustomDeserializationAction ( Type type ) : CustomDeserializationAction
type System.Type
return CustomDeserializationAction
		static CustomDeserializationAction CreateCustomDeserializationAction(Type type)
		{
			ConstructorInfo ctor = type.GetConstructor(
				BindingFlags.DeclaredOnly | BindingFlags.ExactBinding | BindingFlags.Instance
				| BindingFlags.NonPublic | BindingFlags.Public,
				null,
				new Type [] { typeof(SerializationInfo), typeof(StreamingContext) },
				null);
			if (ctor == null)
				throw new SerializationException("Could not find deserialization constructor for " + type.FullName);
			
			DynamicMethod dynamicMethod = new DynamicMethod(
				"CallCtor_" + type.Name,
				MethodAttributes.Public | MethodAttributes.Static,
				CallingConventions.Standard,
				typeof(void), new [] { typeof(object), typeof(SerializationInfo), typeof(StreamingContext) },
				type,
				true);
			ILGenerator il = dynamicMethod.GetILGenerator();
			il.Emit(OpCodes.Ldarg_0);
			il.Emit(OpCodes.Ldarg_1);
			il.Emit(OpCodes.Ldarg_2);
			il.Emit(OpCodes.Call, ctor);
			il.Emit(OpCodes.Ret);
			return (CustomDeserializationAction)dynamicMethod.CreateDelegate(typeof(CustomDeserializationAction));
		}
		#endregion