private static void Serialize(IPollingJobsConfiguration configuration, IDictionary <string, string> result, string prefix)
        {
            if (!string.IsNullOrEmpty(prefix) && !prefix.EndsWith(".", StringComparison.Ordinal))
            {
                prefix = prefix + ".";
            }

            foreach (IPollingJobConfiguration config in configuration)
            {
                result.Add(
                    string.Concat(prefix, config.ImplementationType.Name, ".Type"),
                    RedisConverter.ToString(config.ImplementationType, false));

                RedisTaskProcessorConfigurationRepository.Serialize(config, result, prefix + config.ImplementationType.Name);
            }
        }
        private static void Deserialize(IReadOnlyDictionary <string, string> values, IPollingJobsConfiguration result, string prefix)
        {
            if (!string.IsNullOrEmpty(prefix) && !prefix.EndsWith(".", StringComparison.Ordinal))
            {
                prefix = prefix + ".";
            }

            foreach (KeyValuePair <string, string> pair in values.Where(v => v.Key.StartsWith(prefix, StringComparison.Ordinal) && v.Key.EndsWith(".Type", StringComparison.Ordinal)))
            {
                Type implementationType = RedisConverter.ParseType(pair.Value);

                IPollingJobConfiguration config = result.Add(implementationType);

                RedisTaskProcessorConfigurationRepository.Deserialize(values, config, prefix + implementationType.Name);
            }
        }
        private static void MergeWith(this IPollingJobsConfiguration source, IPollingJobsConfiguration other)
        {
            foreach (IPollingJobConfiguration queueConfig in source.ToArray())
            {
                if (other[queueConfig.ImplementationType] == null)
                {
                    source.Remove(queueConfig.ImplementationType);
                }
            }

            foreach (IPollingJobConfiguration queueConfig in other)
            {
                if (source[queueConfig.ImplementationType] == null)
                {
                    source.AddCopy(queueConfig);
                }
            }
        }