TryParseValue() private method

private TryParseValue ( object value, NameTable nameTable, Xml.Schema.Linq.XNamespaceResolver resolver, SimpleTypeValidator &matchingType, object &typedValue ) : Exception
value object
nameTable System.Xml.NameTable
resolver Xml.Schema.Linq.XNamespaceResolver
matchingType SimpleTypeValidator
typedValue object
return System.Exception
コード例 #1
0
        internal override Exception TryParseValue(object value,
                                                  NameTable nameTable,
                                                  XNamespaceResolver resolver,
                                                  out SimpleTypeValidator matchingType,
                                                  out object typedValue)
        {
            //Only accepts string and IEnumerable
            Exception e = null;

            typedValue   = null;
            matchingType = null;


            if (RestrictionFacets != null && RestrictionFacets.HasLexicalFacets)
            {
                string parsedString = null;
                e = TryParseString(value, nameTable, resolver, out parsedString);
                if (e == null)
                {
                    e = facetsChecker.CheckLexicalFacets(ref parsedString, value, nameTable, resolver, this);
                }
            }

            if (e == null)
            {
                e = facetsChecker.CheckValueFacets(value, this);
            }
            if (e != null)
            {
                return(e);
            }

            //Check item type level
            IList listItems = null;

            e = ToList(value, ref listItems);
            if (e != null)
            {
                return(e);
            }

            foreach (object listItem in listItems)
            {
                object typedItemValue = null;
                SimpleTypeValidator itemMatchingType = null;
                e = itemType.TryParseValue(listItem, nameTable, resolver, out itemMatchingType, out typedItemValue);
                if (e != null)
                {
                    return(e);
                }
            }

            //Passed all the restriction checks
            typedValue   = listItems;
            matchingType = this;
            return(null);
        }
コード例 #2
0
        protected void SetElementWithValidation(XName name, object value, string propertyName, SimpleTypeValidator typeDef)
        {
            object typedValue = null;
            SimpleTypeValidator matchingType = null;
            Exception           e            = typeDef.TryParseValue(value, XTypedServices.NameTable, new XNamespaceResolver(this.GetUntyped()), out matchingType, out typedValue);

            if (e != null)
            {
                throw new LinqToXsdException(propertyName, e.Message);
            }
            this.SetElement(name, typedValue, typeDef.DataType);
        }
コード例 #3
0
        protected void SetValueWithValidation(object value, string propertyName, SimpleTypeValidator simpleType)
        {
            Debug.Assert(!(value is XTypedElement), "Cannot set an XTypedElement value as type of simple typed root element");
            object typedValue = null;
            SimpleTypeValidator matchingType = null;
            Exception           e            = simpleType.TryParseValue(value, XTypedServices.NameTable, new XNamespaceResolver(this.GetUntyped()), out matchingType, out typedValue);

            if (e != null)
            {
                throw new LinqToXsdException(propertyName, e.Message);
            }
            this.SetValue(typedValue, simpleType.DataType);
        }
コード例 #4
0
        protected void SetListValueWithValidation(object value, string propertyName, SimpleTypeValidator typeDef)
        {
            object typedValue;

            Debug.Assert(typeDef is ListSimpleTypeValidator);
            SimpleTypeValidator matchingType = null;
            Exception           e            = typeDef.TryParseValue(value, XTypedServices.NameTable, new XNamespaceResolver(this.GetUntyped()), out matchingType, out typedValue);

            if (e != null)
            {
                throw new LinqToXsdException(propertyName, e.Message);
            }
            this.SetListValue(value, matchingType.DataType);
        }
コード例 #5
0
        protected void SetListElementWithValidation(XName name, object value, string propertyName, SimpleTypeValidator typeDef)
        {
            object typedValue;
            SimpleTypeValidator matchingType = null;
            Exception           e            = typeDef.TryParseValue(value, XTypedServices.NameTable, new XNamespaceResolver(this.Untyped), out matchingType, out typedValue);

            if (e != null)
            {
                throw new LinqToXsdException(propertyName, e.Message);
            }
            ListSimpleTypeValidator listDef = typeDef as ListSimpleTypeValidator;

            Debug.Assert(listDef != null);
            this.SetListElement(name, typedValue, listDef.ItemType.DataType);
        }
コード例 #6
0
        protected void SetElementWithValidation(XName name, object value, string propertyName, SimpleTypeValidator typeDef)
        {
            //Set value after validation
            object typedValue = null;
            SimpleTypeValidator matchingType = null;
            Exception e = typeDef.TryParseValue(value, XTypedServices.NameTable, new XNamespaceResolver(this.GetUntyped()), out matchingType, out typedValue);

            if (e == null)
            {
                SetElement(name, typedValue, typeDef.DataType);
            }
            else
            {
                throw new LinqToXsdException(propertyName, e.Message);
            }
        }
コード例 #7
0
        protected void SetListAttributeWithValidation(XName name,
            object value,
            string propertyName,
            SimpleTypeValidator typeDef)
        {
            object typedValue;
            SimpleTypeValidator matchingType = null;
            Exception e = typeDef.TryParseValue(value, XTypedServices.NameTable, new XNamespaceResolver(this.Untyped), out matchingType, out typedValue);

            if (e != null)
            {
                throw new LinqToXsdException(propertyName, e.Message);
            }

            ListSimpleTypeValidator listDef = typeDef as ListSimpleTypeValidator;
            Debug.Assert(listDef != null);

            SetListAttribute(name, value, listDef.ItemType.DataType);
        }
コード例 #8
0
        //Method for setting values of a simple typed root element
        protected void SetValueWithValidation(object value, string propertyName, SimpleTypeValidator simpleType)
        {
            //Set value after validation
            Debug.Assert((value as XTypedElement) == null, "Cannot set an XTypedElement value as type of simple typed root element");

            object typedValue = null;
            SimpleTypeValidator matchingType = null;
            Exception e = simpleType.TryParseValue(value, XTypedServices.NameTable, new XNamespaceResolver(this.GetUntyped()), out matchingType, out typedValue);

            if (e == null)
            {
                SetValue(typedValue, simpleType.DataType);
            }
            else
            {
                throw new LinqToXsdException(propertyName, e.Message);
            }

        }
コード例 #9
0
        protected void SetListValueWithValidation(object value,
                                                  string propertyName,
                                                  SimpleTypeValidator typeDef)
        {
            //This is for list type, will be saved as space-separated strings
            ListSimpleTypeValidator listDef = typeDef as ListSimpleTypeValidator;

            Debug.Assert(listDef != null);

            object typedValue;
            SimpleTypeValidator matchingType = null;

            Exception e = typeDef.TryParseValue(value, XTypedServices.NameTable, new XNamespaceResolver(this.GetUntyped()), out matchingType, out typedValue);

            if (e == null)
            {
                SetListValue(value, matchingType.DataType);
            }
            else
            {
                throw new LinqToXsdException(propertyName, e.Message);
            }
        }
コード例 #10
0
        protected void SetListValueWithValidation(object value,
            string propertyName,
            SimpleTypeValidator typeDef)
        {
            //This is for list type, will be saved as space-separated strings
            ListSimpleTypeValidator listDef = typeDef as ListSimpleTypeValidator;
            Debug.Assert(listDef != null);

            object typedValue;
            SimpleTypeValidator matchingType = null;

            Exception e = typeDef.TryParseValue(value, XTypedServices.NameTable, new XNamespaceResolver(this.GetUntyped()), out matchingType, out typedValue);

            if (e == null)
            {
                SetListValue(value, matchingType.DataType);
            }
            else
            {
                throw new LinqToXsdException(propertyName, e.Message);
            }
        }