public String serialize(final Object content) {
		if (content == null) {
			return EMPTY_STRING;
		}

		boolean addSeparator = false;
		final StringBuilder stringBuilder = new StringBuilder();

		final List<AnalyticsField> analyticsFields = analyticsParamResolver.getAnalyticsParamFields(content.getClass());

		for (final AnalyticsField analyticsField : analyticsFields) {
			final String paramExpression;
			if (analyticsField instanceof ParameterField) {
				paramExpression = evaluateParam((ParameterField) analyticsField, content);
			} else if (analyticsField instanceof EmbeddedField) {
				final Object embeddedObject = getFieldValue(analyticsField.getField(), content);
				paramExpression = serialize(embeddedObject);
			} else {
				LOG.error("Got unknown AnalyticsField of type " + analyticsField.getClass().getSimpleName());
				paramExpression = null;
			}

			if (paramExpression != null && !paramExpression.isEmpty()) {
				if (addSeparator) {
					stringBuilder.append(SEPARATOR_CHAR);
				} else {
					addSeparator = true;
				}
				stringBuilder.append(paramExpression);
			}
		}

		return stringBuilder.toString();
	}