protected override AssemblyBuilderEmittingContext CreateCodeGenerationContextForSerializerCreation(SerializationContext context)
        {
            string serializerTypeName, serializerTypeNamespace;

            DefaultSerializerNameResolver.ResolveTypeName(
                true,
                typeof(TObject),
                this.GetType().Namespace,
                out serializerTypeName,
                out serializerTypeNamespace
                );
            var spec =
                new SerializerSpecification(
                    typeof(TObject),
                    CollectionTraitsOfThis,
                    serializerTypeName,
                    serializerTypeNamespace
                    );

            return
                (new AssemblyBuilderEmittingContext(
                     context,
                     typeof(TObject),
                     () => SerializationMethodGeneratorManager.Get().CreateEmitter(spec, BaseClass, EmitterFlavor.FieldBased),
                     () => SerializationMethodGeneratorManager.Get().CreateEnumEmitter(context, spec, EmitterFlavor.FieldBased)
                     ));
        }
        /// <summary>
        ///		Create new <see cref="AssemblyBuilderEmittingContext"/> for specified <see cref="Type"/>.
        /// </summary>
        /// <param name="targetType">The target type of the serializer.</param>
        /// <param name="targetTypeCollectionTraits">The collection traits of <paramref name="targetType"/>.</param>
        /// <param name="serializerBaseClass">The base class of the serializer.</param>
        /// <returns><see cref="AssemblyBuilderEmittingContext"/>.</returns>
        public AssemblyBuilderEmittingContext CreateEmittingContext(Type targetType, CollectionTraits targetTypeCollectionTraits, Type serializerBaseClass)
        {
            string serializerTypeName, serializerTypeNamespace;

            DefaultSerializerNameResolver.ResolveTypeName(
                this._assemblyBuilder == null,
                targetType,
                this._namespace,
                out serializerTypeName,
                out serializerTypeNamespace
                );
            var spec =
                new SerializerSpecification(
                    targetType,
                    targetTypeCollectionTraits,
                    serializerTypeName,
                    serializerTypeNamespace
                    );

            this._generatedSerializers.Add(spec);

            return
                (new AssemblyBuilderEmittingContext(
                     this._context,
                     targetType,
                     targetType.GetIsEnum()
                                                ? new Func <SerializerEmitter>(() => this._generatorManager.CreateEnumEmitter(this._context, spec))
                                                : () => this._generatorManager.CreateObjectEmitter(spec, serializerBaseClass)
                     ));
        }
Beispiel #3
0
        /// <summary>
        ///		Create new <see cref="AssemblyBuilderEmittingContext"/> for specified <see cref="Type"/>.
        /// </summary>
        /// <param name="targetType">The target type of the serializer.</param>
        /// <param name="targetTypeCollectionTraits">The collection traits of <paramref name="targetType"/>.</param>
        /// <param name="serializerBaseClass">The base class of the serializer.</param>
        /// <returns><see cref="AssemblyBuilderEmittingContext"/>.</returns>
        public AssemblyBuilderEmittingContext CreateEmittingContext(Type targetType, CollectionTraits targetTypeCollectionTraits, Type serializerBaseClass)
        {
            string serializerTypeName, serializerTypeNamespace;

            DefaultSerializerNameResolver.ResolveTypeName(
                this._assemblyBuilder == null,
                targetType,
                typeof(AssemblyBuilderCodeGenerationContext).Namespace,
                out serializerTypeName,
                out serializerTypeNamespace
                );
            var spec =
                new SerializerSpecification(
                    targetType,
                    targetTypeCollectionTraits,
                    serializerTypeName,
                    serializerTypeNamespace
                    );

            this._generatedSerializers.Add(spec);

            return
                (new AssemblyBuilderEmittingContext(
                     this._context,
                     targetType,
                     () => this._generatorManager.CreateEmitter(spec, serializerBaseClass, EmitterFlavor.FieldBased),
                     () => this._generatorManager.CreateEnumEmitter(this._context, spec, EmitterFlavor.FieldBased)
                     ));
        }