Exemple #1
0
        internal static object SoapCoerceArg(object value, Type pt, Hashtable keyToNamespaceTable)
        {
            object obj = null;

            if (value != null)
            {
                try
                {
                    if (pt.IsByRef)
                    {
                        pt = pt.GetElementType();
                    }
                    if (pt.IsInstanceOfType(value))
                    {
                        obj = value;
                    }
                    else
                    {
                        string text = value as string;
                        if (text != null)
                        {
                            if (pt == typeof(double))
                            {
                                if (text == "INF")
                                {
                                    obj = double.PositiveInfinity;
                                }
                                else if (text == "-INF")
                                {
                                    obj = double.NegativeInfinity;
                                }
                                else
                                {
                                    obj = double.Parse(text, CultureInfo.InvariantCulture);
                                }
                            }
                            else if (pt == typeof(float))
                            {
                                if (text == "INF")
                                {
                                    obj = float.PositiveInfinity;
                                }
                                else if (text == "-INF")
                                {
                                    obj = float.NegativeInfinity;
                                }
                                else
                                {
                                    obj = float.Parse(text, CultureInfo.InvariantCulture);
                                }
                            }
                            else if (SoapType.typeofISoapXsd.IsAssignableFrom(pt))
                            {
                                if (pt == SoapType.typeofSoapTime)
                                {
                                    obj = SoapTime.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapDate)
                                {
                                    obj = SoapDate.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapYearMonth)
                                {
                                    obj = SoapYearMonth.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapYear)
                                {
                                    obj = SoapYear.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapMonthDay)
                                {
                                    obj = SoapMonthDay.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapDay)
                                {
                                    obj = SoapDay.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapMonth)
                                {
                                    obj = SoapMonth.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapHexBinary)
                                {
                                    obj = SoapHexBinary.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapBase64Binary)
                                {
                                    obj = SoapBase64Binary.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapInteger)
                                {
                                    obj = SoapInteger.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapPositiveInteger)
                                {
                                    obj = SoapPositiveInteger.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapNonPositiveInteger)
                                {
                                    obj = SoapNonPositiveInteger.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapNonNegativeInteger)
                                {
                                    obj = SoapNonNegativeInteger.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapNegativeInteger)
                                {
                                    obj = SoapNegativeInteger.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapAnyUri)
                                {
                                    obj = SoapAnyUri.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapQName)
                                {
                                    obj = SoapQName.Parse(text);
                                    SoapQName soapQName = (SoapQName)obj;
                                    if (soapQName.Key.Length == 0)
                                    {
                                        soapQName.Namespace = (string)keyToNamespaceTable["xmlns"];
                                    }
                                    else
                                    {
                                        soapQName.Namespace = (string)keyToNamespaceTable["xmlns:" + soapQName.Key];
                                    }
                                }
                                else if (pt == SoapType.typeofSoapNotation)
                                {
                                    obj = SoapNotation.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapNormalizedString)
                                {
                                    obj = SoapNormalizedString.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapToken)
                                {
                                    obj = SoapToken.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapLanguage)
                                {
                                    obj = SoapLanguage.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapName)
                                {
                                    obj = SoapName.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapIdrefs)
                                {
                                    obj = SoapIdrefs.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapEntities)
                                {
                                    obj = SoapEntities.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapNmtoken)
                                {
                                    obj = SoapNmtoken.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapNmtokens)
                                {
                                    obj = SoapNmtokens.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapNcName)
                                {
                                    obj = SoapNcName.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapId)
                                {
                                    obj = SoapId.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapIdref)
                                {
                                    obj = SoapIdref.Parse(text);
                                }
                                else if (pt == SoapType.typeofSoapEntity)
                                {
                                    obj = SoapEntity.Parse(text);
                                }
                            }
                            else if (pt == typeof(bool))
                            {
                                if (text == "1" || text == "true")
                                {
                                    obj = true;
                                }
                                else
                                {
                                    if (!(text == "0") && !(text == "false"))
                                    {
                                        throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Message_CoercionFailed"), text, pt));
                                    }
                                    obj = false;
                                }
                            }
                            else if (pt == typeof(DateTime))
                            {
                                obj = SoapDateTime.Parse(text);
                            }
                            else if (pt.IsPrimitive)
                            {
                                obj = Convert.ChangeType(value, pt, CultureInfo.InvariantCulture);
                            }
                            else if (pt == typeof(TimeSpan))
                            {
                                obj = SoapDuration.Parse(text);
                            }
                            else if (pt == typeof(char))
                            {
                                obj = text[0];
                            }
                            else
                            {
                                obj = Convert.ChangeType(value, pt, CultureInfo.InvariantCulture);
                            }
                        }
                        else
                        {
                            obj = Convert.ChangeType(value, pt, CultureInfo.InvariantCulture);
                        }
                    }
                }
                catch (Exception)
                {
                }
                if (obj == null)
                {
                    string arg;
                    if (RemotingServices.IsTransparentProxy(value))
                    {
                        arg = typeof(MarshalByRefObject).ToString();
                    }
                    else
                    {
                        arg = value.ToString();
                    }
                    throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Message_CoercionFailed"), arg, pt));
                }
            }
            return(obj);
        }
Exemple #2
0
        internal static object SoapCoerceArg(object value, Type pt, Hashtable keyToNamespaceTable)
        {
            object obj = (object)null;

            if (value != null)
            {
                try
                {
                    if (pt.IsByRef)
                    {
                        pt = pt.GetElementType();
                    }
                    if (pt.IsInstanceOfType(value))
                    {
                        obj = value;
                    }
                    else
                    {
                        string s = value as string;
                        if (s != null)
                        {
                            if (pt == typeof(double))
                            {
                                obj = !(s == "INF") ? (!(s == "-INF") ? (object)double.Parse(s, (IFormatProvider)CultureInfo.InvariantCulture) : (object)double.NegativeInfinity) : (object)double.PositiveInfinity;
                            }
                            else if (pt == typeof(float))
                            {
                                obj = !(s == "INF") ? (!(s == "-INF") ? (object)float.Parse(s, (IFormatProvider)CultureInfo.InvariantCulture) : (object)float.NegativeInfinity) : (object)float.PositiveInfinity;
                            }
                            else if (SoapType.typeofISoapXsd.IsAssignableFrom(pt))
                            {
                                if (pt == SoapType.typeofSoapTime)
                                {
                                    obj = (object)SoapTime.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapDate)
                                {
                                    obj = (object)SoapDate.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapYearMonth)
                                {
                                    obj = (object)SoapYearMonth.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapYear)
                                {
                                    obj = (object)SoapYear.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapMonthDay)
                                {
                                    obj = (object)SoapMonthDay.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapDay)
                                {
                                    obj = (object)SoapDay.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapMonth)
                                {
                                    obj = (object)SoapMonth.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapHexBinary)
                                {
                                    obj = (object)SoapHexBinary.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapBase64Binary)
                                {
                                    obj = (object)SoapBase64Binary.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapInteger)
                                {
                                    obj = (object)SoapInteger.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapPositiveInteger)
                                {
                                    obj = (object)SoapPositiveInteger.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapNonPositiveInteger)
                                {
                                    obj = (object)SoapNonPositiveInteger.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapNonNegativeInteger)
                                {
                                    obj = (object)SoapNonNegativeInteger.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapNegativeInteger)
                                {
                                    obj = (object)SoapNegativeInteger.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapAnyUri)
                                {
                                    obj = (object)SoapAnyUri.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapQName)
                                {
                                    obj = (object)SoapQName.Parse(s);
                                    SoapQName soapQname = (SoapQName)obj;
                                    soapQname.Namespace = soapQname.Key.Length != 0 ? (string)keyToNamespaceTable[(object)("xmlns:" + soapQname.Key)] : (string)keyToNamespaceTable[(object)"xmlns"];
                                }
                                else if (pt == SoapType.typeofSoapNotation)
                                {
                                    obj = (object)SoapNotation.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapNormalizedString)
                                {
                                    obj = (object)SoapNormalizedString.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapToken)
                                {
                                    obj = (object)SoapToken.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapLanguage)
                                {
                                    obj = (object)SoapLanguage.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapName)
                                {
                                    obj = (object)SoapName.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapIdrefs)
                                {
                                    obj = (object)SoapIdrefs.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapEntities)
                                {
                                    obj = (object)SoapEntities.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapNmtoken)
                                {
                                    obj = (object)SoapNmtoken.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapNmtokens)
                                {
                                    obj = (object)SoapNmtokens.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapNcName)
                                {
                                    obj = (object)SoapNcName.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapId)
                                {
                                    obj = (object)SoapId.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapIdref)
                                {
                                    obj = (object)SoapIdref.Parse(s);
                                }
                                else if (pt == SoapType.typeofSoapEntity)
                                {
                                    obj = (object)SoapEntity.Parse(s);
                                }
                            }
                            else if (pt == typeof(bool))
                            {
                                if (s == "1" || s == "true")
                                {
                                    obj = (object)true;
                                }
                                else
                                {
                                    if (!(s == "0") && !(s == "false"))
                                    {
                                        throw new RemotingException(string.Format((IFormatProvider)CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Message_CoercionFailed"), (object)s, (object)pt));
                                    }
                                    obj = (object)false;
                                }
                            }
                            else
                            {
                                obj = !(pt == typeof(DateTime)) ? (!pt.IsPrimitive ? (!(pt == typeof(TimeSpan)) ? (!(pt == typeof(char)) ? Convert.ChangeType(value, pt, (IFormatProvider)CultureInfo.InvariantCulture) : (object)s[0]) : (object)SoapDuration.Parse(s)) : Convert.ChangeType(value, pt, (IFormatProvider)CultureInfo.InvariantCulture)) : (object)SoapDateTime.Parse(s);
                            }
                        }
                        else
                        {
                            obj = Convert.ChangeType(value, pt, (IFormatProvider)CultureInfo.InvariantCulture);
                        }
                    }
                }
                catch (Exception ex)
                {
                }
                if (obj == null)
                {
                    throw new RemotingException(string.Format((IFormatProvider)CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Message_CoercionFailed"), !RemotingServices.IsTransparentProxy(value) ? (object)value.ToString() : (object)typeof(MarshalByRefObject).ToString(), (object)pt));
                }
            }
            return(obj);
        }
Exemple #3
0
        internal static object SoapCoerceArg(object value, Type pt, Hashtable keyToNamespaceTable)
        {
            object obj2 = null;

            if (value == null)
            {
                return(obj2);
            }
            try
            {
                if (pt.IsByRef)
                {
                    pt = pt.GetElementType();
                }
                if (pt.IsInstanceOfType(value))
                {
                    obj2 = value;
                }
                else
                {
                    string s = value as string;
                    if (s != null)
                    {
                        if (pt == typeof(double))
                        {
                            if (s == "INF")
                            {
                                obj2 = (double)1.0 / (double)0.0;
                            }
                            else if (s == "-INF")
                            {
                                obj2 = (double)-1.0 / (double)0.0;
                            }
                            else
                            {
                                obj2 = double.Parse(s, CultureInfo.InvariantCulture);
                            }
                        }
                        else if (pt == typeof(float))
                        {
                            if (s == "INF")
                            {
                                obj2 = (float)1.0 / (float)0.0;
                            }
                            else if (s == "-INF")
                            {
                                obj2 = (float)-1.0 / (float)0.0;
                            }
                            else
                            {
                                obj2 = float.Parse(s, CultureInfo.InvariantCulture);
                            }
                        }
                        else if (SoapType.typeofISoapXsd.IsAssignableFrom(pt))
                        {
                            if (pt == SoapType.typeofSoapTime)
                            {
                                obj2 = SoapTime.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapDate)
                            {
                                obj2 = SoapDate.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapYearMonth)
                            {
                                obj2 = SoapYearMonth.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapYear)
                            {
                                obj2 = SoapYear.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapMonthDay)
                            {
                                obj2 = SoapMonthDay.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapDay)
                            {
                                obj2 = SoapDay.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapMonth)
                            {
                                obj2 = SoapMonth.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapHexBinary)
                            {
                                obj2 = SoapHexBinary.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapBase64Binary)
                            {
                                obj2 = SoapBase64Binary.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapInteger)
                            {
                                obj2 = SoapInteger.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapPositiveInteger)
                            {
                                obj2 = SoapPositiveInteger.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapNonPositiveInteger)
                            {
                                obj2 = SoapNonPositiveInteger.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapNonNegativeInteger)
                            {
                                obj2 = SoapNonNegativeInteger.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapNegativeInteger)
                            {
                                obj2 = SoapNegativeInteger.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapAnyUri)
                            {
                                obj2 = SoapAnyUri.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapQName)
                            {
                                obj2 = SoapQName.Parse(s);
                                SoapQName name = (SoapQName)obj2;
                                if (name.Key.Length == 0)
                                {
                                    name.Namespace = (string)keyToNamespaceTable["xmlns"];
                                }
                                else
                                {
                                    name.Namespace = (string)keyToNamespaceTable["xmlns:" + name.Key];
                                }
                            }
                            else if (pt == SoapType.typeofSoapNotation)
                            {
                                obj2 = SoapNotation.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapNormalizedString)
                            {
                                obj2 = SoapNormalizedString.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapToken)
                            {
                                obj2 = SoapToken.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapLanguage)
                            {
                                obj2 = SoapLanguage.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapName)
                            {
                                obj2 = SoapName.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapIdrefs)
                            {
                                obj2 = SoapIdrefs.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapEntities)
                            {
                                obj2 = SoapEntities.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapNmtoken)
                            {
                                obj2 = SoapNmtoken.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapNmtokens)
                            {
                                obj2 = SoapNmtokens.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapNcName)
                            {
                                obj2 = SoapNcName.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapId)
                            {
                                obj2 = SoapId.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapIdref)
                            {
                                obj2 = SoapIdref.Parse(s);
                            }
                            else if (pt == SoapType.typeofSoapEntity)
                            {
                                obj2 = SoapEntity.Parse(s);
                            }
                        }
                        else
                        {
                            if (pt == typeof(bool))
                            {
                                switch (s)
                                {
                                case "1":
                                case "true":
                                    obj2 = true;
                                    goto Label_055E;

                                case "0":
                                case "false":
                                    obj2 = false;
                                    goto Label_055E;
                                }
                                throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Message_CoercionFailed"), new object[] { s, pt }));
                            }
                            if (pt == typeof(DateTime))
                            {
                                obj2 = SoapDateTime.Parse(s);
                            }
                            else if (pt.IsPrimitive)
                            {
                                obj2 = Convert.ChangeType(value, pt, CultureInfo.InvariantCulture);
                            }
                            else if (pt == typeof(TimeSpan))
                            {
                                obj2 = SoapDuration.Parse(s);
                            }
                            else if (pt == typeof(char))
                            {
                                obj2 = s[0];
                            }
                            else
                            {
                                obj2 = Convert.ChangeType(value, pt, CultureInfo.InvariantCulture);
                            }
                        }
                    }
                    else
                    {
                        obj2 = Convert.ChangeType(value, pt, CultureInfo.InvariantCulture);
                    }
                }
            }
            catch (Exception)
            {
            }
Label_055E:
            if (obj2 != null)
            {
                return(obj2);
            }
            string str2 = null;

            if (RemotingServices.IsTransparentProxy(value))
            {
                str2 = typeof(MarshalByRefObject).ToString();
            }
            else
            {
                str2 = value.ToString();
            }
            throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Message_CoercionFailed"), new object[] { str2, pt }));
        }
        internal static object FromString(string value, InternalPrimitiveTypeE code)
        {
            switch (code)
            {
            case InternalPrimitiveTypeE.Boolean:
                if (!(value == "1") && !(value == "true"))
                {
                    if ((value != "0") && (value != "false"))
                    {
                        throw new SerializationException(string.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_typeCoercion"), new object[] { value, "Boolean" }));
                    }
                    return(false);
                }
                return(true);

            case InternalPrimitiveTypeE.Double:
                if (!(value == "INF"))
                {
                    if (value == "-INF")
                    {
                        return((double)-1.0 / (double)0.0);
                    }
                    return(double.Parse(value, CultureInfo.InvariantCulture));
                }
                return((double)1.0 / (double)0.0);

            case InternalPrimitiveTypeE.Single:
                if (!(value == "INF"))
                {
                    if (value == "-INF")
                    {
                        return((float)-1.0 / (float)0.0);
                    }
                    return(float.Parse(value, CultureInfo.InvariantCulture));
                }
                return((float)1.0 / (float)0.0);

            case InternalPrimitiveTypeE.TimeSpan:
                return(SoapDuration.Parse(value));

            case InternalPrimitiveTypeE.DateTime:
                return(SoapDateTime.Parse(value));

            case InternalPrimitiveTypeE.Time:
                return(SoapTime.Parse(value));

            case InternalPrimitiveTypeE.Date:
                return(SoapDate.Parse(value));

            case InternalPrimitiveTypeE.YearMonth:
                return(SoapYearMonth.Parse(value));

            case InternalPrimitiveTypeE.Year:
                return(SoapYear.Parse(value));

            case InternalPrimitiveTypeE.MonthDay:
                return(SoapMonthDay.Parse(value));

            case InternalPrimitiveTypeE.Day:
                return(SoapDay.Parse(value));

            case InternalPrimitiveTypeE.Month:
                return(SoapMonth.Parse(value));

            case InternalPrimitiveTypeE.HexBinary:
                return(SoapHexBinary.Parse(value));

            case InternalPrimitiveTypeE.Base64Binary:
                return(SoapBase64Binary.Parse(value));

            case InternalPrimitiveTypeE.Integer:
                return(SoapInteger.Parse(value));

            case InternalPrimitiveTypeE.PositiveInteger:
                return(SoapPositiveInteger.Parse(value));

            case InternalPrimitiveTypeE.NonPositiveInteger:
                return(SoapNonPositiveInteger.Parse(value));

            case InternalPrimitiveTypeE.NonNegativeInteger:
                return(SoapNonNegativeInteger.Parse(value));

            case InternalPrimitiveTypeE.NegativeInteger:
                return(SoapNegativeInteger.Parse(value));

            case InternalPrimitiveTypeE.AnyUri:
                return(SoapAnyUri.Parse(value));

            case InternalPrimitiveTypeE.QName:
                return(SoapQName.Parse(value));

            case InternalPrimitiveTypeE.Notation:
                return(SoapNotation.Parse(value));

            case InternalPrimitiveTypeE.NormalizedString:
                return(SoapNormalizedString.Parse(value));

            case InternalPrimitiveTypeE.Token:
                return(SoapToken.Parse(value));

            case InternalPrimitiveTypeE.Language:
                return(SoapLanguage.Parse(value));

            case InternalPrimitiveTypeE.Name:
                return(SoapName.Parse(value));

            case InternalPrimitiveTypeE.Idrefs:
                return(SoapIdrefs.Parse(value));

            case InternalPrimitiveTypeE.Entities:
                return(SoapEntities.Parse(value));

            case InternalPrimitiveTypeE.Nmtoken:
                return(SoapNmtoken.Parse(value));

            case InternalPrimitiveTypeE.Nmtokens:
                return(SoapNmtokens.Parse(value));

            case InternalPrimitiveTypeE.NcName:
                return(SoapNcName.Parse(value));

            case InternalPrimitiveTypeE.Id:
                return(SoapId.Parse(value));

            case InternalPrimitiveTypeE.Idref:
                return(SoapIdref.Parse(value));

            case InternalPrimitiveTypeE.Entity:
                return(SoapEntity.Parse(value));
            }
            if (code != InternalPrimitiveTypeE.Invalid)
            {
                return(Convert.ChangeType(value, ToTypeCode(code), CultureInfo.InvariantCulture));
            }
            return(value);
        }