/// <summary>
		/// Get the parameter generator method for a command and the type used for the parameter.
		/// </summary>
		/// <param name="command">The command to analyze.</param>
		/// <param name="type">The type of the parameter.</param>
		/// <returns>The command generator.</returns>
		public static Action<IDbCommand, object> GetOutputParameterConverter(IDbCommand command, Type type)
		{
			QueryIdentity identity = new QueryIdentity(command, type);

			// try to get the deserializer. if not found, create one.
			return _deserializers.GetOrAdd(identity, key => CreateClassOutputParameterConverter(command, type));
		}
		/// <summary>
		/// Get the parameter generator method for a command and the type used for the parameter.
		/// </summary>
		/// <param name="command">The command to analyze.</param>
		/// <param name="type">The type of the parameter.</param>
		/// <returns>The command generator.</returns>
		public static Action<IDbCommand, object> GetInputParameterGenerator(IDbCommand command, Type type)
		{
			QueryIdentity identity = new QueryIdentity(command, type);

			// try to get the deserializer. if not found, create one.
			return _serializers.GetOrAdd(
				identity,
				key =>
				{
					if (type.IsSubclassOf(typeof(DynamicObject)))
						return CreateDynamicInputParameterGenerator(command);
					else if (type == typeof(Dictionary<string, object>))
						return CreateDynamicInputParameterGenerator(command);
					else
						return CreateClassInputParameterGenerator(command, type);
				});
		}