Пример #1
0
        public IFormatter BuildFormatter()
        {
            Initialize();
            CreateSerializeMethod();
            CreateDeserializeMethod();
            CreateShouldSkipMethod();

            IEditableFormatter editableFormatter = Activator.CreateInstance(typeof(EditableFormatter <>).MakeGenericType(TargetType)) as IEditableFormatter;

            editableFormatter.DeserializationDelegate = DeserializeExpression.Compile();
            editableFormatter.SerializationDelegate   = SerializeExpression.Compile();
            editableFormatter.ShouldSkipFieldDelegate = ShouldSkipExpression.Compile();

            return(editableFormatter as IFormatter);
        }
Пример #2
0
        public void CreateDebugClass()
        {
            TypeBuilder debugClass = GeneratedAssembly.CreateType(TargetType.Name + "Formatter");

            SerializeMethod = debugClass.DefineMethod("Serialize", _staticMethodAttributes, typeof(void), SerializeParams.Types);
            SerializeExpression.CompileToMethod(SerializeMethod);

            DeserializeMethod = debugClass.DefineMethod("Deserialize", _staticMethodAttributes, TargetType, DeserializeParams.Types);
            DeserializeExpression.CompileToMethod(DeserializeMethod);

            ShouldSkipMethod = debugClass.DefineMethod("ShouldSkip", _staticMethodAttributes, typeof(bool), new Type[] { TargetType });
            ShouldSkipExpression.CompileToMethod(ShouldSkipMethod);

            debugClass.CreateType();
        }