protected virtual object ConvertStringToPropertyType(ModelBindingContext bindingContext, string value)
        {
            if (bindingContext.ModelMetadata.ConvertEmptyStringToNull && string.IsNullOrWhiteSpace(value))
            {
                return(null);
            }

            var extensionInfo = ObjectExtensionManager.Instance.GetOrNull(ExtensibleObjectType);

            if (extensionInfo == null)
            {
                return(value);
            }

            var propertyName = ExtraPropertyBindingHelper.ExtractExtraPropertyName(bindingContext.ModelName);

            if (propertyName == null)
            {
                return(value);
            }

            var propertyInfo = extensionInfo.GetPropertyOrNull(propertyName);

            if (propertyInfo == null)
            {
                return(value);
            }

            return(TypeHelper.ConvertFromString(
                       propertyInfo.Type,
                       value
                       ));
        }
Example #2
0
        public void ExtractExtraPropertyName_Tests()
        {
            ExtraPropertyBindingHelper.ExtractExtraPropertyName(
                "MyObject.UserInfo.ExtraProperties[SocialSecurityNumber]"
                ).ShouldBe("SocialSecurityNumber");

            ExtraPropertyBindingHelper.ExtractExtraPropertyName(
                "UserInfo.ExtraProperties[SocialSecurityNumber]"
                ).ShouldBe("SocialSecurityNumber");

            ExtraPropertyBindingHelper.ExtractExtraPropertyName(
                "ExtraProperties[SocialSecurityNumber]"
                ).ShouldBe("SocialSecurityNumber");

            ExtraPropertyBindingHelper.ExtractExtraPropertyName(
                "SocialSecurityNumber"
                ).ShouldBeNull();
        }