public String serialize(final Map<String, ?> map) {
		final StringBuilder sb = new StringBuilder();
		boolean start = true;
		sb.append(this.startToken);
		for (final Entry<String, ?> e : map.entrySet()) {
			if (!start) {
				sb.append(this.separator);
			}
			start = false;
			sb.append(e.getKey());
			sb.append(this.kvSeparator);
			if (e.getValue() instanceof Collection) {
				final SimpleListSerializer sl = new SimpleListSerializer();
				sb.append(sl.serialize((Collection<?>) e.getValue()));
			} else if (e.getValue() instanceof Map) {
				sb.append(this.serialize((Map<String, ?>) e.getValue()));
			} else {
				sb.append(e.getValue().toString());
			}
		}
		sb.append(this.endToken);
		return sb.toString();
	}