/// <summary>
        /// The data values as published properties.
        /// </summary>
        /// <param name="container">
        /// The <see cref="ProductVariantDetachedContentDisplay"/>.
        /// </param>
        /// <param name="contentType">
        /// The content type.
        /// </param>
        /// <returns>
        /// The <see cref="IEnumerable{IPublishedProperty}"/>.
        /// </returns>
        public static IEnumerable<IPublishedProperty> DataValuesAsPublishedProperties(this IHaveDetachedDataValues container, PublishedContentType contentType)
        {
            var properties = new List<IPublishedProperty>();

            foreach (var dcv in container.DetachedDataValues)
            {
                var propType = contentType.GetPropertyType(dcv.Key);
                object valObj;
                try
                {
                    valObj = DetachedValuesConverter.Current.ConvertDbForContent(propType, dcv).Value;
                }
                catch
                {
                    valObj = dcv.Value;
                }

                if (propType != null)
                {
                    properties.Add(new DetachedPublishedProperty(propType, valObj));
                }
            }

            return properties;
        }
        /// <summary>
        /// The data values as published properties.
        /// </summary>
        /// <param name="pvd">
        /// The <see cref="ProductVariantDetachedContentDisplay"/>.
        /// </param>
        /// <param name="contentType">
        /// The content type.
        /// </param>
        /// <returns>
        /// The <see cref="IEnumerable{IPublishedProperty}"/>.
        /// </returns>
        public static IEnumerable<IPublishedProperty> DataValuesAsPublishedProperties(this ProductVariantDetachedContentDisplay pvd, PublishedContentType contentType)
        {
            var properties = new List<IPublishedProperty>();
            foreach (var value in pvd.DetachedDataValues)
            {
                var propType = contentType.GetPropertyType(value.Key);
                object valObj;
                try
                {
                    valObj = JsonConvert.DeserializeObject<object>(value.Value);
                }
                catch
                {
                    valObj = value.Value.Substring(1, value.Value.Length - 1);
                }

                if (propType != null)
                {
                    properties.Add(new DetachedPublishedProperty(propType, valObj));
                }
            }

            return properties;
        }
        private object ConvertProperty(IPublishedProperty property, IPublishedContent owner, PublishedContentType contentType)
        {
            string editorAlias = contentType.GetPropertyType(property.PropertyTypeAlias).PropertyEditorAlias;
            
            // Property converter exist
            if (PropertyConverters.ContainsKey(editorAlias))
            {
                return PropertyConverters[editorAlias].Convert(property, owner);
            }

            return property.Value;
        }