示例#1
0
        internal NullableMessagePackSerializer(SerializationContext context, EmitterFlavor emitterFlavor)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (NullableMessagePackSerializer <T> ._nullableTImplicitOperator == null)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, "'{0}' is not nullable type.", new object[] { typeof(T) }));
            }
            SerializerEmitter emitter = SerializationMethodGeneratorManager.Get().CreateEmitter(typeof(T), emitterFlavor);

            NullableMessagePackSerializer <T> .CreatePacking(emitter);

            NullableMessagePackSerializer <T> .CreateUnpacking(emitter);

            this._underlying = emitter.CreateInstance <T>(context);
        }
        private void GenerateAssemblyFile(AssemblyBuilder assemblyBuilder)
        {
            var context = new SerializationContext();

            context.EmitterFlavor       = EmitterFlavor.FieldBased;
            context.GeneratorOption     = SerializationMethodGeneratorOption.CanDump;
            context.SerializationMethod = this._method;

            // AssemblyBuilder cannot be debugged because no PDB files (and 'dummy' source files to step).
            DefaultSerializationMethodGeneratorManager.SetUpAssemblyBuilderAttributes(assemblyBuilder, false);

            var generatorManager = SerializationMethodGeneratorManager.Get(assemblyBuilder);

            foreach (var targetType in this._targetTypes)
            {
                (Activator.CreateInstance(typeof(Builder <>).MakeGenericType(targetType)) as Builder).GenerateSerializerTo(context, generatorManager);
            }

            assemblyBuilder.Save(this._assemblyName.Name + ".dll");
        }