internal SerializationFormatter(
			Parameters parameters)
		{
			this.l3typeManagerCollection =
				new L3TypeManagerCollection(parameters.customModifiers);

			#region For Serializer.cs
#if !DEBUG
			var f2 =
	(delAddAllStructs<int>)(addAllStructs<int>);
			this.gfAddAllStructs = f2.Method.GetGenericMethodDefinition();
#endif
			#endregion For Serializer.cs


			if (this.IsStringFormatter && parameters.Stream != null)
				this.streamWriter = new StreamWriter(parameters.Stream, Encoding.UTF8);
			else
				this.binaryWriter = new FileTools.BinaryWriter2(parameters.Stream, Encoding.UTF8);

			parameters.TheStreamingMode =
			 (parameters.StreamingMode != null) ?
			 parameters.StreamingMode.Value
			 :
				(parameters.setOfStreams != null ?
					StreamingModes.SetOfStreams :
					(this.CanManageMultiplexStreams ? StreamingModes.MultiplexStream : StreamingModes.AssembledStream));

			this.parameters = parameters;

			{
				bool UseMemoryStreams = this.parameters.TheStreamingMode == StreamingModes.AssembledStream;

				if (parameters.SerializeTypeDescriptors)
					this.channelInfos[(int)ChannelNumber.TypeDescriptorsChannel] = new ChannelInfos(
						this,
											parameters.setOfStreams != null ? parameters.setOfStreams.TypesStream :
											UseMemoryStreams ? new MemoryStream() : parameters.Stream
#if DEBUG
, "Types branch"
#endif
, ChannelNumber.TypeDescriptorsChannel
					);
				this.channelInfos[(int)ChannelNumber.InstancesChannel] = new ChannelInfos(
					this,
										parameters.setOfStreams != null ? parameters.setOfStreams.InstancesStream :
										UseMemoryStreams ? new MemoryStream() : parameters.Stream
#if DEBUG
, "Instances branch"
#endif
, ChannelNumber.InstancesChannel
				);
			}

		}
			internal readonly FileTools.BinaryWriter2 binaryWriter; // the one of the Formatter when multiplexed.

			internal ChannelInfos(
				SerializationFormatter Formatter,
				Stream stream,
#if DEBUG
 string NameForDebugging,
#endif
 ChannelNumber ChannelNumber
)
			{
				this.stream = stream;

#if DEBUG
				this.NameForDebugging = NameForDebugging;
#endif
				this.ChannelNumber = ChannelNumber;


				this.streamWriterForText =
					Formatter.IsStringFormatter ?
					(Formatter.parameters.TheStreamingMode == StreamingModes.SetOfStreams ?
					new StreamWriter(stream)
					: Formatter.streamWriter)
					: null;

				this.binaryWriter =
					!Formatter.IsStringFormatter ?
					(Formatter.parameters.TheStreamingMode == StreamingModes.SetOfStreams ?
					new FileTools.BinaryWriter2(stream, Encoding.UTF8)
					: Formatter.binaryWriter)
					: null;
			}