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) )); }
/// <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) )); }