Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / clr / src / ManagedLibraries / SoapSerializer / SoapConverter.cs / 1 / SoapConverter.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//============================================================
//
// Class: Converter
//
// Author: Peter de Jong ([....])
//
// Purpose: Hexify and bin.base64 conversions
//
// Date: June 10, 1999
//
//===========================================================
namespace System.Runtime.Serialization.Formatters.Soap {
using System.Threading;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Metadata;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
using System.Runtime.Serialization;
using System;
using System.Reflection;
using System.Globalization;
using System.Text;
using System.Security.Permissions;
sealed internal class Converter
{
private Converter()
{
}
private static int primitiveTypeEnumLength = 46; //Number of PrimitiveTypeEnums
// The following section are utilities to read and write XML types
// Translates a runtime type into an enumeration code
internal static InternalPrimitiveTypeE SoapToCode(Type type)
{
return ToCode(type);
}
internal static InternalPrimitiveTypeE ToCode(Type type)
{
InternalST.Soap("Converter", "ToCode Type Entry ",type," IsEnum "+type.IsEnum);
InternalPrimitiveTypeE code = InternalPrimitiveTypeE.Invalid;
if (type.IsEnum)
return code = InternalPrimitiveTypeE.Invalid;
TypeCode typeCode = Type.GetTypeCode(type);
if (typeCode == TypeCode.Object)
{
if (typeofISoapXsd.IsAssignableFrom(type))
{
if (type == typeofSoapTime)
code = InternalPrimitiveTypeE.Time;
else if (type == typeofSoapDate)
code = InternalPrimitiveTypeE.Date;
else if (type == typeofSoapYearMonth)
code = InternalPrimitiveTypeE.YearMonth;
else if (type == typeofSoapYear)
code = InternalPrimitiveTypeE.Year;
else if (type == typeofSoapMonthDay)
code = InternalPrimitiveTypeE.MonthDay;
else if (type == typeofSoapDay)
code = InternalPrimitiveTypeE.Day;
else if (type == typeofSoapMonth)
code = InternalPrimitiveTypeE.Month;
else if (type == typeofSoapHexBinary)
code = InternalPrimitiveTypeE.HexBinary;
else if (type == typeofSoapBase64Binary)
code = InternalPrimitiveTypeE.Base64Binary;
else if (type == typeofSoapInteger)
code = InternalPrimitiveTypeE.Integer;
else if (type == typeofSoapPositiveInteger)
code = InternalPrimitiveTypeE.PositiveInteger;
else if (type == typeofSoapNonPositiveInteger)
code = InternalPrimitiveTypeE.NonPositiveInteger;
else if (type == typeofSoapNonNegativeInteger)
code = InternalPrimitiveTypeE.NonNegativeInteger;
else if (type == typeofSoapNegativeInteger)
code = InternalPrimitiveTypeE.NegativeInteger;
else if (type == typeofSoapAnyUri)
code = InternalPrimitiveTypeE.AnyUri;
else if (type == typeofSoapQName)
code = InternalPrimitiveTypeE.QName;
else if (type == typeofSoapNotation)
code = InternalPrimitiveTypeE.Notation;
else if (type == typeofSoapNormalizedString)
code = InternalPrimitiveTypeE.NormalizedString;
else if (type == typeofSoapToken)
code = InternalPrimitiveTypeE.Token;
else if (type == typeofSoapLanguage)
code = InternalPrimitiveTypeE.Language;
else if (type == typeofSoapName)
code = InternalPrimitiveTypeE.Name;
else if (type == typeofSoapIdrefs)
code = InternalPrimitiveTypeE.Idrefs;
else if (type == typeofSoapEntities)
code = InternalPrimitiveTypeE.Entities;
else if (type == typeofSoapNmtoken)
code = InternalPrimitiveTypeE.Nmtoken;
else if (type == typeofSoapNmtokens)
code = InternalPrimitiveTypeE.Nmtokens;
else if (type == typeofSoapNcName)
code = InternalPrimitiveTypeE.NcName;
else if (type == typeofSoapId)
code = InternalPrimitiveTypeE.Id;
else if (type == typeofSoapIdref)
code = InternalPrimitiveTypeE.Idref;
else if (type == typeofSoapEntity)
code = InternalPrimitiveTypeE.Entity;
}
else
{
if (type == typeofTimeSpan)
code = InternalPrimitiveTypeE.TimeSpan;
else
code = InternalPrimitiveTypeE.Invalid;
}
}
else
code = ToPrimitiveTypeEnum(typeCode);
InternalST.Soap("Converter", "ToCode Exit " , ((Enum)code).ToString());
return code;
}
// Translates a String into a runtime type enumeration code.
// The types translated are COM+ runtime types and XML Data Types
internal static InternalPrimitiveTypeE ToCode(String value)
{
InternalST.Soap("Converter", "ToCode String Entry ",value);
if (value == null)
throw new ArgumentNullException("serParser", String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("ArgumentNull_WithParamName"), value));
String lxsdType = value.ToLower(CultureInfo.InvariantCulture);
Char firstChar = lxsdType[0];
InternalPrimitiveTypeE code = InternalPrimitiveTypeE.Invalid;
switch (firstChar)
{
case 'a':
if (lxsdType == "anyuri")
code = InternalPrimitiveTypeE.AnyUri;
break;
case 'b':
if (lxsdType == "boolean")
code = InternalPrimitiveTypeE.Boolean;
else if (lxsdType == "byte")
code = InternalPrimitiveTypeE.SByte;
else if (lxsdType == "base64binary")
code = InternalPrimitiveTypeE.Base64Binary;
else if (lxsdType == "base64")
code = InternalPrimitiveTypeE.Base64Binary;
break;
case 'c':
if ((lxsdType == "char") || (lxsdType == "character")) // Not xsd types
code = InternalPrimitiveTypeE.Char;
break;
case 'd':
if (lxsdType == "double")
code = InternalPrimitiveTypeE.Double;
if (lxsdType == "datetime")
code = InternalPrimitiveTypeE.DateTime;
else if (lxsdType == "duration")
code = InternalPrimitiveTypeE.TimeSpan;
else if (lxsdType == "date")
code = InternalPrimitiveTypeE.Date;
else if (lxsdType == "decimal")
code = InternalPrimitiveTypeE.Decimal;
break;
case 'e':
if (lxsdType == "entities")
code = InternalPrimitiveTypeE.Entities;
else if (lxsdType == "entity")
code = InternalPrimitiveTypeE.Entity;
break;
case 'f':
if (lxsdType == "float")
code = InternalPrimitiveTypeE.Single;
break;
case 'g':
if (lxsdType == "gyearmonth")
code = InternalPrimitiveTypeE.YearMonth;
else if (lxsdType == "gyear")
code = InternalPrimitiveTypeE.Year;
else if (lxsdType == "gmonthday")
code = InternalPrimitiveTypeE.MonthDay;
else if (lxsdType == "gday")
code = InternalPrimitiveTypeE.Day;
else if (lxsdType == "gmonth")
code = InternalPrimitiveTypeE.Month;
break;
case 'h':
if (lxsdType == "hexbinary")
code = InternalPrimitiveTypeE.HexBinary;
break;
case 'i':
if (lxsdType == "int")
code = InternalPrimitiveTypeE.Int32;
if (lxsdType == "integer")
code = InternalPrimitiveTypeE.Integer;
else if (lxsdType == "idrefs")
code = InternalPrimitiveTypeE.Idrefs;
else if (lxsdType == "id")
code = InternalPrimitiveTypeE.Id;
else if (lxsdType == "idref")
code = InternalPrimitiveTypeE.Idref;
break;
case 'l':
if (lxsdType == "long")
code = InternalPrimitiveTypeE.Int64;
else if (lxsdType == "language")
code = InternalPrimitiveTypeE.Language;
break;
case 'n':
if (lxsdType == "number") //No longer used
code = InternalPrimitiveTypeE.Decimal;
else if (lxsdType == "normalizedstring")
code = InternalPrimitiveTypeE.NormalizedString;
else if (lxsdType == "nonpositiveinteger")
code = InternalPrimitiveTypeE.NonPositiveInteger;
else if (lxsdType == "negativeinteger")
code = InternalPrimitiveTypeE.NegativeInteger;
else if (lxsdType == "nonnegativeinteger")
code = InternalPrimitiveTypeE.NonNegativeInteger;
else if (lxsdType == "notation")
code = InternalPrimitiveTypeE.Notation;
else if (lxsdType == "nmtoken")
code = InternalPrimitiveTypeE.Nmtoken;
else if (lxsdType == "nmtokens")
code = InternalPrimitiveTypeE.Nmtokens;
else if (lxsdType == "name")
code = InternalPrimitiveTypeE.Name;
else if (lxsdType == "ncname")
code = InternalPrimitiveTypeE.NcName;
break;
case 'p':
if (lxsdType == "positiveinteger")
code = InternalPrimitiveTypeE.PositiveInteger;
break;
case 'q':
if (lxsdType == "qname")
code = InternalPrimitiveTypeE.QName;
break;
case 's':
if (lxsdType == "short")
code = InternalPrimitiveTypeE.Int16;
else if (lxsdType == "system.byte") // used during serialization
code = InternalPrimitiveTypeE.Byte;
else if (lxsdType == "system.sbyte") // used during serialization
code = InternalPrimitiveTypeE.SByte;
else if (lxsdType == "system") //used during serialization
code = ToCode(value.Substring(7));
else if (lxsdType == "system.runtime.remoting.metadata") //used during serialization
code = ToCode(value.Substring(33));
break;
case 't':
if (lxsdType == "time")
code = InternalPrimitiveTypeE.Time;
else if (lxsdType == "token")
code = InternalPrimitiveTypeE.Token;
else if (lxsdType == "timeinstant")
code = InternalPrimitiveTypeE.DateTime;
else if (lxsdType == "timeduration")
code = InternalPrimitiveTypeE.TimeSpan;
break;
case 'u':
if (lxsdType == "unsignedlong")
code = InternalPrimitiveTypeE.UInt64;
else if (lxsdType == "unsignedint")
code = InternalPrimitiveTypeE.UInt32;
else if (lxsdType == "unsignedshort")
code = InternalPrimitiveTypeE.UInt16;
else if (lxsdType == "unsignedbyte")
code = InternalPrimitiveTypeE.Byte;
break;
default:
code = InternalPrimitiveTypeE.Invalid;
break;
}
InternalST.Soap("Converter", "ToCode Exit ", ((Enum)code).ToString());
return code;
}
internal static bool IsWriteAsByteArray(InternalPrimitiveTypeE code)
{
bool isWrite = false;
switch (code)
{
case InternalPrimitiveTypeE.Boolean:
case InternalPrimitiveTypeE.Char:
case InternalPrimitiveTypeE.Byte:
case InternalPrimitiveTypeE.Double:
case InternalPrimitiveTypeE.Int16:
case InternalPrimitiveTypeE.Int32:
case InternalPrimitiveTypeE.Int64:
case InternalPrimitiveTypeE.SByte:
case InternalPrimitiveTypeE.Single:
case InternalPrimitiveTypeE.UInt16:
case InternalPrimitiveTypeE.UInt32:
case InternalPrimitiveTypeE.UInt64:
isWrite = true;
break;
}
return isWrite;
}
internal static InternalNameSpaceE GetNameSpaceEnum(InternalPrimitiveTypeE code, Type type, WriteObjectInfo objectInfo, out String typeName)
{
InternalST.Soap("Converter", "GetNameSpaceEnum Entry ",((Enum)code).ToString()," type ",type);
InternalNameSpaceE nameSpaceEnum = InternalNameSpaceE.None;
typeName = null;
if (code != InternalPrimitiveTypeE.Invalid)
{
if (code == InternalPrimitiveTypeE.Char)
{
nameSpaceEnum = InternalNameSpaceE.UrtSystem;
typeName = "System.Char";
}
else
{
nameSpaceEnum = InternalNameSpaceE.XdrPrimitive;
typeName = ToXmlDataType(code);
}
}
if ((nameSpaceEnum == InternalNameSpaceE.None) && (type != null))
{
if (type == typeofString)
nameSpaceEnum = InternalNameSpaceE.XdrString;
else
{
if (objectInfo == null)
{
typeName = type.FullName;
if (type.Module.Assembly == urtAssembly)
nameSpaceEnum = InternalNameSpaceE.UrtSystem;
else
nameSpaceEnum = InternalNameSpaceE.UrtUser;
}
else
{
typeName = objectInfo.GetTypeFullName();
// If objref is created from a proxy, it will have the proxy namespace
// Need to force ObjRef to have system namespace
if (objectInfo.GetAssemblyString().Equals(urtAssemblyString))
nameSpaceEnum = InternalNameSpaceE.UrtSystem;
else
nameSpaceEnum = InternalNameSpaceE.UrtUser;
}
}
}
// If there is an explicitly specified namespace, then it is used
if (objectInfo != null)
{
if (!objectInfo.isSi &&
(objectInfo.IsAttributeNameSpace() ||
objectInfo.IsCustomXmlAttribute() ||
objectInfo.IsCustomXmlElement()))
{
nameSpaceEnum = InternalNameSpaceE.Interop;
}
else if (objectInfo.IsCallElement())
{
nameSpaceEnum = InternalNameSpaceE.CallElement;
}
}
InternalST.Soap("Converter", "GetNameSpaceEnum Exit ", ((Enum)nameSpaceEnum).ToString()," typeName ",typeName);
return nameSpaceEnum;
}
// Primitive types for which types need to be transmitted in Soap for ISerialable
internal static bool IsSiTransmitType(InternalPrimitiveTypeE code)
{
switch (code)
{
case InternalPrimitiveTypeE.TimeSpan:
case InternalPrimitiveTypeE.DateTime:
case InternalPrimitiveTypeE.Time:
case InternalPrimitiveTypeE.Date:
case InternalPrimitiveTypeE.YearMonth:
case InternalPrimitiveTypeE.Year:
case InternalPrimitiveTypeE.MonthDay:
case InternalPrimitiveTypeE.Day:
case InternalPrimitiveTypeE.Month:
case InternalPrimitiveTypeE.HexBinary:
case InternalPrimitiveTypeE.Base64Binary:
case InternalPrimitiveTypeE.Integer:
case InternalPrimitiveTypeE.PositiveInteger:
case InternalPrimitiveTypeE. NonPositiveInteger:
case InternalPrimitiveTypeE.NonNegativeInteger:
case InternalPrimitiveTypeE.NegativeInteger:
case InternalPrimitiveTypeE.AnyUri:
case InternalPrimitiveTypeE.QName:
case InternalPrimitiveTypeE.Notation:
case InternalPrimitiveTypeE.NormalizedString:
case InternalPrimitiveTypeE.Token:
case InternalPrimitiveTypeE.Language:
case InternalPrimitiveTypeE.Name:
case InternalPrimitiveTypeE.Idrefs:
case InternalPrimitiveTypeE.Entities:
case InternalPrimitiveTypeE.Nmtoken:
case InternalPrimitiveTypeE.Nmtokens:
case InternalPrimitiveTypeE.NcName:
case InternalPrimitiveTypeE.Id:
case InternalPrimitiveTypeE.Idref:
case InternalPrimitiveTypeE.Entity:
case InternalPrimitiveTypeE.Invalid:
return true;
default:
return false;
}
}
private static Type[] typeA;
private static void InitTypeA()
{
typeA = new Type[primitiveTypeEnumLength];
typeA[(int)InternalPrimitiveTypeE.Invalid] = null;
typeA[(int)InternalPrimitiveTypeE.Boolean] = typeofBoolean;
typeA[(int)InternalPrimitiveTypeE.Byte] = typeofByte;
typeA[(int)InternalPrimitiveTypeE.Char] = typeofChar;
typeA[(int)InternalPrimitiveTypeE.Decimal] = typeofDecimal;
typeA[(int)InternalPrimitiveTypeE.Double] = typeofDouble;
typeA[(int)InternalPrimitiveTypeE.Int16] = typeofInt16;
typeA[(int)InternalPrimitiveTypeE.Int32] = typeofInt32;
typeA[(int)InternalPrimitiveTypeE.Int64] = typeofInt64;
typeA[(int)InternalPrimitiveTypeE.SByte] = typeofSByte;
typeA[(int)InternalPrimitiveTypeE.Single] = typeofSingle;
typeA[(int)InternalPrimitiveTypeE.TimeSpan] = typeofTimeSpan;
typeA[(int)InternalPrimitiveTypeE.DateTime] = typeofDateTime;
typeA[(int)InternalPrimitiveTypeE.UInt16] = typeofUInt16;
typeA[(int)InternalPrimitiveTypeE.UInt32] = typeofUInt32;
typeA[(int)InternalPrimitiveTypeE.UInt64] = typeofUInt64;
typeA[(int)InternalPrimitiveTypeE.Time] = typeofSoapTime;
typeA[(int)InternalPrimitiveTypeE.Date] = typeofSoapDate;
typeA[(int)InternalPrimitiveTypeE.YearMonth] = typeofSoapYearMonth;
typeA[(int)InternalPrimitiveTypeE.Year] = typeofSoapYear;
typeA[(int)InternalPrimitiveTypeE.MonthDay] = typeofSoapMonthDay;
typeA[(int)InternalPrimitiveTypeE.Day] = typeofSoapDay;
typeA[(int)InternalPrimitiveTypeE.Month] = typeofSoapMonth;
typeA[(int)InternalPrimitiveTypeE.HexBinary] = typeofSoapHexBinary;
typeA[(int)InternalPrimitiveTypeE.Base64Binary] = typeofSoapBase64Binary;
typeA[(int)InternalPrimitiveTypeE.Integer] = typeofSoapInteger;
typeA[(int)InternalPrimitiveTypeE.PositiveInteger] = typeofSoapPositiveInteger;
typeA[(int)InternalPrimitiveTypeE.NonPositiveInteger] = typeofSoapNonPositiveInteger;
typeA[(int)InternalPrimitiveTypeE.NonNegativeInteger] = typeofSoapNonNegativeInteger;
typeA[(int)InternalPrimitiveTypeE.NegativeInteger] = typeofSoapNegativeInteger;
typeA[(int)InternalPrimitiveTypeE.AnyUri] = typeofSoapAnyUri;
typeA[(int)InternalPrimitiveTypeE.QName] = typeofSoapQName;
typeA[(int)InternalPrimitiveTypeE.Notation] = typeofSoapNotation;
typeA[(int)InternalPrimitiveTypeE.NormalizedString] = typeofSoapNormalizedString;
typeA[(int)InternalPrimitiveTypeE.Token] = typeofSoapToken;
typeA[(int)InternalPrimitiveTypeE.Language] = typeofSoapLanguage;
typeA[(int)InternalPrimitiveTypeE.Name] = typeofSoapName;
typeA[(int)InternalPrimitiveTypeE.Idrefs] = typeofSoapIdrefs;
typeA[(int)InternalPrimitiveTypeE.Entities] = typeofSoapEntities;
typeA[(int)InternalPrimitiveTypeE.Nmtoken] = typeofSoapNmtoken;
typeA[(int)InternalPrimitiveTypeE.Nmtokens] = typeofSoapNmtokens;
typeA[(int)InternalPrimitiveTypeE.NcName] = typeofSoapNcName;
typeA[(int)InternalPrimitiveTypeE.Id] = typeofSoapId;
typeA[(int)InternalPrimitiveTypeE.Idref] = typeofSoapIdref;
typeA[(int)InternalPrimitiveTypeE.Entity] = typeofSoapEntity;
}
// Returns a COM runtime type associated with the type code
internal static Type SoapToType(InternalPrimitiveTypeE code)
{
return ToType(code);
}
internal static Type ToType(InternalPrimitiveTypeE code)
{
InternalST.Soap("Converter", "ToType Entry ", ((Enum)code).ToString());
lock(typeofConverter)
{
if (typeA == null)
InitTypeA();
}
InternalST.Soap("Converter", "ToType Exit ", ((typeA[(int)code] == null)?"null ":typeA[(int)code].Name));
return typeA[(int)code];
}
private static String[] valueA;
private static void InitValueA()
{
valueA = new String[primitiveTypeEnumLength];
valueA[(int)InternalPrimitiveTypeE.Invalid] = null;
valueA[(int)InternalPrimitiveTypeE.Boolean] = "System.Boolean";
valueA[(int)InternalPrimitiveTypeE.Byte] = "System.Byte";
valueA[(int)InternalPrimitiveTypeE.Char] = "System.Char";
valueA[(int)InternalPrimitiveTypeE.Decimal] = "System.Decimal";
valueA[(int)InternalPrimitiveTypeE.Double] = "System.Double";
valueA[(int)InternalPrimitiveTypeE.Int16] = "System.Int16";
valueA[(int)InternalPrimitiveTypeE.Int32] = "System.Int32";
valueA[(int)InternalPrimitiveTypeE.Int64] = "System.Int64";
valueA[(int)InternalPrimitiveTypeE.SByte] = "System.SByte";
valueA[(int)InternalPrimitiveTypeE.Single] = "System.Single";
valueA[(int)InternalPrimitiveTypeE.TimeSpan] = "System.TimeSpan";
valueA[(int)InternalPrimitiveTypeE.DateTime] = "System.DateTime";
valueA[(int)InternalPrimitiveTypeE.UInt16] = "System.UInt16";
valueA[(int)InternalPrimitiveTypeE.UInt32] = "System.UInt32";
valueA[(int)InternalPrimitiveTypeE.UInt64] = "System.UInt64";
valueA[(int)InternalPrimitiveTypeE.Time] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapTime";
valueA[(int)InternalPrimitiveTypeE.Date] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapDate";
valueA[(int)InternalPrimitiveTypeE.YearMonth] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapYearMonth";
valueA[(int)InternalPrimitiveTypeE.Year] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapYear";
valueA[(int)InternalPrimitiveTypeE.MonthDay] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapMonthDay";
valueA[(int)InternalPrimitiveTypeE.Day] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapDay";
valueA[(int)InternalPrimitiveTypeE.Month] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapMonth";
valueA[(int)InternalPrimitiveTypeE.HexBinary] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary";
valueA[(int)InternalPrimitiveTypeE.Base64Binary] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapBase64Binary";
valueA[(int)InternalPrimitiveTypeE.Integer] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapInteger";
valueA[(int)InternalPrimitiveTypeE.PositiveInteger] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapPositiveInteger";
valueA[(int)InternalPrimitiveTypeE.NonPositiveInteger] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNonPositiveInteger";
valueA[(int)InternalPrimitiveTypeE.NonNegativeInteger] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNonNegativeInteger";
valueA[(int)InternalPrimitiveTypeE.NegativeInteger] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNegativeInteger";
valueA[(int)InternalPrimitiveTypeE.AnyUri] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapAnyUri";
valueA[(int)InternalPrimitiveTypeE.QName] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapQName";
valueA[(int)InternalPrimitiveTypeE.Notation] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNotation";
valueA[(int)InternalPrimitiveTypeE.NormalizedString] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNormalizedString";
valueA[(int)InternalPrimitiveTypeE.Token] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapToken";
valueA[(int)InternalPrimitiveTypeE.Language] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapLanguage";
valueA[(int)InternalPrimitiveTypeE.Name] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapName";
valueA[(int)InternalPrimitiveTypeE.Idrefs] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapIdrefs";
valueA[(int)InternalPrimitiveTypeE.Entities] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapEntities";
valueA[(int)InternalPrimitiveTypeE.Nmtoken] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNmtoken";
valueA[(int)InternalPrimitiveTypeE.Nmtokens] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNmtokens";
valueA[(int)InternalPrimitiveTypeE.NcName] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNcName";
valueA[(int)InternalPrimitiveTypeE.Id] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapId";
valueA[(int)InternalPrimitiveTypeE.Idref] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapIdref";
valueA[(int)InternalPrimitiveTypeE.Entity] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapEntity";
}
// Returns a String containg a COM+ runtime type associated with the type code
internal static String SoapToComType(InternalPrimitiveTypeE code)
{
return ToComType(code);
}
internal static String ToComType(InternalPrimitiveTypeE code)
{
InternalST.Soap("Converter", "ToComType Entry ", ((Enum)code).ToString());
lock(typeofConverter)
{
if (valueA == null)
InitValueA();
}
InternalST.Soap("Converter", "ToComType Exit ",((valueA[(int)code] == null)?"null":valueA[(int)code]));
return valueA[(int)code];
}
private static String[] valueB;
private static void InitValueB()
{
valueB = new String[primitiveTypeEnumLength];
valueB[(int)InternalPrimitiveTypeE.Invalid] = null;
valueB[(int)InternalPrimitiveTypeE.Boolean] = "boolean";
valueB[(int)InternalPrimitiveTypeE.Byte] = "unsignedByte";
valueB[(int)InternalPrimitiveTypeE.Char] = "char"; //not an xsi type, but will cause problems with clr if char is not used
valueB[(int)InternalPrimitiveTypeE.Decimal] = "decimal";
valueB[(int)InternalPrimitiveTypeE.Double] = "double";
valueB[(int)InternalPrimitiveTypeE.Int16] = "short";
valueB[(int)InternalPrimitiveTypeE.Int32] = "int";
valueB[(int)InternalPrimitiveTypeE.Int64] = "long";
valueB[(int)InternalPrimitiveTypeE.SByte] = "byte";
valueB[(int)InternalPrimitiveTypeE.Single] = "float";
valueB[(int)InternalPrimitiveTypeE.TimeSpan] = "duration";
valueB[(int)InternalPrimitiveTypeE.DateTime] = "dateTime";
valueB[(int)InternalPrimitiveTypeE.UInt16] = "unsignedShort";
valueB[(int)InternalPrimitiveTypeE.UInt32] = "unsignedInt";
valueB[(int)InternalPrimitiveTypeE.UInt64] = "unsignedLong";
valueB[(int)InternalPrimitiveTypeE.Time] = SoapTime.XsdType;
valueB[(int)InternalPrimitiveTypeE.Date] = SoapDate.XsdType;
valueB[(int)InternalPrimitiveTypeE.YearMonth] = SoapYearMonth.XsdType;
valueB[(int)InternalPrimitiveTypeE.Year] = SoapYear.XsdType;
valueB[(int)InternalPrimitiveTypeE.MonthDay] = SoapMonthDay.XsdType;
valueB[(int)InternalPrimitiveTypeE.Day] = SoapDay.XsdType;
valueB[(int)InternalPrimitiveTypeE.Month] = SoapMonth.XsdType;
valueB[(int)InternalPrimitiveTypeE.HexBinary] = SoapHexBinary.XsdType;
valueB[(int)InternalPrimitiveTypeE.Base64Binary] = SoapBase64Binary.XsdType;
valueB[(int)InternalPrimitiveTypeE.Integer] = SoapInteger.XsdType;
valueB[(int)InternalPrimitiveTypeE.PositiveInteger] = SoapPositiveInteger.XsdType;
valueB[(int)InternalPrimitiveTypeE.NonPositiveInteger] = SoapNonPositiveInteger.XsdType;
valueB[(int)InternalPrimitiveTypeE.NonNegativeInteger] = SoapNonNegativeInteger.XsdType;
valueB[(int)InternalPrimitiveTypeE.NegativeInteger] = SoapNegativeInteger.XsdType;
valueB[(int)InternalPrimitiveTypeE.AnyUri] = SoapAnyUri.XsdType;
valueB[(int)InternalPrimitiveTypeE.QName] = SoapQName.XsdType;
valueB[(int)InternalPrimitiveTypeE.Notation] = SoapNotation.XsdType;
valueB[(int)InternalPrimitiveTypeE.NormalizedString] = SoapNormalizedString.XsdType;
valueB[(int)InternalPrimitiveTypeE.Token] = SoapToken.XsdType;
valueB[(int)InternalPrimitiveTypeE.Language] = SoapLanguage.XsdType;
valueB[(int)InternalPrimitiveTypeE.Name] = SoapName.XsdType;
valueB[(int)InternalPrimitiveTypeE.Idrefs] = SoapIdrefs.XsdType;
valueB[(int)InternalPrimitiveTypeE.Entities] = SoapEntities.XsdType;
valueB[(int)InternalPrimitiveTypeE.Nmtoken] = SoapNmtoken.XsdType;
valueB[(int)InternalPrimitiveTypeE.Nmtokens] = SoapNmtokens.XsdType;
valueB[(int)InternalPrimitiveTypeE.NcName] = SoapNcName.XsdType;
valueB[(int)InternalPrimitiveTypeE.Id] = SoapId.XsdType;
valueB[(int)InternalPrimitiveTypeE.Idref] = SoapIdref.XsdType;
valueB[(int)InternalPrimitiveTypeE.Entity] = SoapEntity.XsdType;
}
// Returns a String containg an XML Data type associated with the type code
internal static String ToXmlDataType(InternalPrimitiveTypeE code)
{
InternalST.Soap( "Converter", "ToXmlDataType Entry ", ((Enum)code).ToString());
lock(typeofConverter)
{
if (valueB == null)
InitValueB();
}
InternalST.Soap( "Converter", "ToXmlDataType Exit ",((valueB[(int)code] == null)?"null":valueB[(int)code]));
return valueB[(int)code];
}
private static TypeCode[] typeCodeA;
private static void InitTypeCodeA()
{
typeCodeA = new TypeCode[primitiveTypeEnumLength];
typeCodeA[(int)InternalPrimitiveTypeE.Invalid] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Boolean] = TypeCode.Boolean;
typeCodeA[(int)InternalPrimitiveTypeE.Byte] = TypeCode.Byte;
typeCodeA[(int)InternalPrimitiveTypeE.Char] = TypeCode.Char;
typeCodeA[(int)InternalPrimitiveTypeE.Decimal] = TypeCode.Decimal;
typeCodeA[(int)InternalPrimitiveTypeE.Double] = TypeCode.Double;
typeCodeA[(int)InternalPrimitiveTypeE.Int16] = TypeCode.Int16;
typeCodeA[(int)InternalPrimitiveTypeE.Int32] = TypeCode.Int32;
typeCodeA[(int)InternalPrimitiveTypeE.Int64] = TypeCode.Int64;
typeCodeA[(int)InternalPrimitiveTypeE.SByte] = TypeCode.SByte;
typeCodeA[(int)InternalPrimitiveTypeE.Single] = TypeCode.Single;
typeCodeA[(int)InternalPrimitiveTypeE.TimeSpan] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.DateTime] = TypeCode.DateTime;
typeCodeA[(int)InternalPrimitiveTypeE.UInt16] = TypeCode.UInt16;
typeCodeA[(int)InternalPrimitiveTypeE.UInt32] = TypeCode.UInt32;
typeCodeA[(int)InternalPrimitiveTypeE.UInt64] = TypeCode.UInt64;
typeCodeA[(int)InternalPrimitiveTypeE.Time] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Date] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.YearMonth] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Year] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.MonthDay] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Day] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Month] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.HexBinary] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Base64Binary] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Integer] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.PositiveInteger] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.NonPositiveInteger] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.NonNegativeInteger] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.NegativeInteger] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.AnyUri] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.QName] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Notation] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.NormalizedString] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Token] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Language] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Name] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Idrefs] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Entities] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Nmtoken] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Nmtokens] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.NcName] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Id] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Idref] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Entity] = TypeCode.Object;
}
// Returns a System.TypeCode from a InternalPrimitiveTypeE
internal static TypeCode ToTypeCode(InternalPrimitiveTypeE code)
{
lock(typeofConverter)
{
if (typeCodeA == null)
InitTypeCodeA();
}
return typeCodeA[(int)code];
}
private static InternalPrimitiveTypeE[] codeA;
private static void InitCodeA()
{
codeA = new InternalPrimitiveTypeE[19];
codeA[(int)TypeCode.Empty] = InternalPrimitiveTypeE.Invalid;
codeA[(int)TypeCode.Object] = InternalPrimitiveTypeE.Invalid;
codeA[(int)TypeCode.DBNull] = InternalPrimitiveTypeE.Invalid;
codeA[(int)TypeCode.Boolean] = InternalPrimitiveTypeE.Boolean;
codeA[(int)TypeCode.Char] = InternalPrimitiveTypeE.Char;
codeA[(int)TypeCode.SByte] = InternalPrimitiveTypeE.SByte;
codeA[(int)TypeCode.Byte] = InternalPrimitiveTypeE.Byte;
codeA[(int)TypeCode.Int16] = InternalPrimitiveTypeE.Int16;
codeA[(int)TypeCode.UInt16] = InternalPrimitiveTypeE.UInt16;
codeA[(int)TypeCode.Int32] = InternalPrimitiveTypeE.Int32;
codeA[(int)TypeCode.UInt32] = InternalPrimitiveTypeE.UInt32;
codeA[(int)TypeCode.Int64] = InternalPrimitiveTypeE.Int64;
codeA[(int)TypeCode.UInt64] = InternalPrimitiveTypeE.UInt64;
codeA[(int)TypeCode.Single] = InternalPrimitiveTypeE.Single;
codeA[(int)TypeCode.Double] = InternalPrimitiveTypeE.Double;
codeA[(int)TypeCode.Decimal] = InternalPrimitiveTypeE.Decimal;
codeA[(int)TypeCode.DateTime] = InternalPrimitiveTypeE.DateTime;
codeA[17] = InternalPrimitiveTypeE.Invalid;
codeA[(int)TypeCode.String] = InternalPrimitiveTypeE.Invalid;
//codeA[(int)TypeCode.TimeSpan] = InternalPrimitiveTypeE.TimeSpan;
}
// Returns a InternalPrimitiveTypeE from a System.TypeCode
internal static InternalPrimitiveTypeE ToPrimitiveTypeEnum(TypeCode typeCode)
{
lock(typeofConverter)
{
if (codeA == null)
InitCodeA();
}
return codeA[(int)typeCode];
}
//********************
private static bool[] escapeA;
private static void InitEscapeA()
{
escapeA = new bool[primitiveTypeEnumLength];
escapeA[(int)InternalPrimitiveTypeE.Invalid] = true;
escapeA[(int)InternalPrimitiveTypeE.Boolean] = false;
escapeA[(int)InternalPrimitiveTypeE.Byte] = false;
escapeA[(int)InternalPrimitiveTypeE.Char] = true;
escapeA[(int)InternalPrimitiveTypeE.Decimal] = false;
escapeA[(int)InternalPrimitiveTypeE.Double] = false;
escapeA[(int)InternalPrimitiveTypeE.Int16] = false;
escapeA[(int)InternalPrimitiveTypeE.Int32] = false;
escapeA[(int)InternalPrimitiveTypeE.Int64] = false;
escapeA[(int)InternalPrimitiveTypeE.SByte] = false;
escapeA[(int)InternalPrimitiveTypeE.Single] = false;
escapeA[(int)InternalPrimitiveTypeE.TimeSpan] = false;
escapeA[(int)InternalPrimitiveTypeE.DateTime] = false;
escapeA[(int)InternalPrimitiveTypeE.UInt16] = false;
escapeA[(int)InternalPrimitiveTypeE.UInt32] = false;
escapeA[(int)InternalPrimitiveTypeE.UInt64] = false;
escapeA[(int)InternalPrimitiveTypeE.Time] = false;
escapeA[(int)InternalPrimitiveTypeE.Date] = false;
escapeA[(int)InternalPrimitiveTypeE.YearMonth] = false;
escapeA[(int)InternalPrimitiveTypeE.Year] = false;
escapeA[(int)InternalPrimitiveTypeE.MonthDay] = false;
escapeA[(int)InternalPrimitiveTypeE.Day] = false;
escapeA[(int)InternalPrimitiveTypeE.Month] = false;
escapeA[(int)InternalPrimitiveTypeE.HexBinary] = false;
escapeA[(int)InternalPrimitiveTypeE.Base64Binary] = false;
escapeA[(int)InternalPrimitiveTypeE.Integer] = false;
escapeA[(int)InternalPrimitiveTypeE.PositiveInteger] = false;
escapeA[(int)InternalPrimitiveTypeE.NonPositiveInteger] = false;
escapeA[(int)InternalPrimitiveTypeE.NonNegativeInteger] = false;
escapeA[(int)InternalPrimitiveTypeE.NegativeInteger] = false;
escapeA[(int)InternalPrimitiveTypeE.AnyUri] = true;
escapeA[(int)InternalPrimitiveTypeE.QName] = true;
escapeA[(int)InternalPrimitiveTypeE.Notation] = true;
escapeA[(int)InternalPrimitiveTypeE.NormalizedString] = false;
escapeA[(int)InternalPrimitiveTypeE.Token] = true;
escapeA[(int)InternalPrimitiveTypeE.Language] = true;
escapeA[(int)InternalPrimitiveTypeE.Name] = true;
escapeA[(int)InternalPrimitiveTypeE.Idrefs] = true;
escapeA[(int)InternalPrimitiveTypeE.Entities] = true;
escapeA[(int)InternalPrimitiveTypeE.Nmtoken] = true;
escapeA[(int)InternalPrimitiveTypeE.Nmtokens] = true;
escapeA[(int)InternalPrimitiveTypeE.NcName] = true;
escapeA[(int)InternalPrimitiveTypeE.Id] = true;
escapeA[(int)InternalPrimitiveTypeE.Idref] = true;
escapeA[(int)InternalPrimitiveTypeE.Entity] = true;
}
// Checks if the string is escaped (XML escape characters)
internal static bool IsEscaped(InternalPrimitiveTypeE code)
{
lock(typeofConverter)
{
if (escapeA == null)
InitEscapeA();
}
return escapeA[(int)code];
}
// Translates an Object into a string with the COM+ runtime type name
//<
private static StringBuilder sb = new StringBuilder(30);
internal static String SoapToString(Object data, InternalPrimitiveTypeE code)
{
return ToString(data, code);
}
internal static String ToString(Object data, InternalPrimitiveTypeE code)
{
// Any changes here need to also be made in System.Runtime.Remoting.Message.cs::SoapCoerceArg
String value;
InternalST.Soap( "Converter", "ToString Entry ", ((data==null)?"":data.GetType().ToString())," ",data," " , ((Enum)code).ToString());
switch (code)
{
case InternalPrimitiveTypeE.Boolean:
bool b = (bool)data;
if (b)
value = "true";
else
value = "false";
break;
case InternalPrimitiveTypeE.TimeSpan:
value = SoapDuration.ToString((TimeSpan)data);
break;
case InternalPrimitiveTypeE.DateTime:
value = SoapDateTime.ToString((DateTime)data);
break;
case InternalPrimitiveTypeE.Invalid:
// ToString should not be called if data is an object or string
InternalST.SoapAssert(false, "[Converter.ToString]!InternalPrimitiveTypeE.Invalid ");
value = data.ToString();
break;
case InternalPrimitiveTypeE.Double:
Double doublevalue = (Double)data;
if (Double.IsPositiveInfinity(doublevalue))
value = "INF";
else if (Double.IsNegativeInfinity(doublevalue))
value = "-INF";
else
value = doublevalue.ToString("R", CultureInfo.InvariantCulture);
break;
case InternalPrimitiveTypeE.Single:
Single singlevalue = (Single)data;
if (Single.IsPositiveInfinity(singlevalue))
value = "INF";
else if (Single.IsNegativeInfinity(singlevalue))
value = "-INF";
else
value = singlevalue.ToString("R", CultureInfo.InvariantCulture);
break;
case InternalPrimitiveTypeE.Time:
case InternalPrimitiveTypeE.Date:
case InternalPrimitiveTypeE.YearMonth:
case InternalPrimitiveTypeE.Year:
case InternalPrimitiveTypeE.MonthDay:
case InternalPrimitiveTypeE.Day:
case InternalPrimitiveTypeE.Month:
case InternalPrimitiveTypeE.HexBinary:
case InternalPrimitiveTypeE.Base64Binary:
case InternalPrimitiveTypeE.Integer:
case InternalPrimitiveTypeE.PositiveInteger:
case InternalPrimitiveTypeE. NonPositiveInteger:
case InternalPrimitiveTypeE.NonNegativeInteger:
case InternalPrimitiveTypeE.NegativeInteger:
case InternalPrimitiveTypeE.AnyUri:
case InternalPrimitiveTypeE.QName:
case InternalPrimitiveTypeE.Notation:
case InternalPrimitiveTypeE.NormalizedString:
case InternalPrimitiveTypeE.Token:
case InternalPrimitiveTypeE.Language:
case InternalPrimitiveTypeE.Name:
case InternalPrimitiveTypeE.Idrefs:
case InternalPrimitiveTypeE.Entities:
case InternalPrimitiveTypeE.Nmtoken:
case InternalPrimitiveTypeE.Nmtokens:
case InternalPrimitiveTypeE.NcName:
case InternalPrimitiveTypeE.Id:
case InternalPrimitiveTypeE.Idref:
case InternalPrimitiveTypeE.Entity:
value = data.ToString();
break;
default:
value = (String)Convert.ChangeType(data, typeofString, CultureInfo.InvariantCulture);
break;
}
InternalST.Soap( "Converter", "ToString Exit ",value);
return value;
}
// Translates a string into an Object
internal static Object FromString(String value, InternalPrimitiveTypeE code)
{
Object var;
InternalST.Soap( "Converter", "FromString Entry ",value," " , ((Enum)code).ToString());
switch (code)
{
case InternalPrimitiveTypeE.Boolean:
if (value == "1" || value == "true")
var = (bool)true;
else if (value == "0" || value =="false")
var = (bool)false;
else
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_typeCoercion"),value, "Boolean"));
break;
case InternalPrimitiveTypeE.TimeSpan:
var = SoapDuration.Parse(value);
break;
case InternalPrimitiveTypeE.DateTime:
var = SoapDateTime.Parse(value);
break;
case InternalPrimitiveTypeE.Double:
if (value == "INF")
var = Double.PositiveInfinity;
else if (value == "-INF")
var = Double.NegativeInfinity;
else
var = Double.Parse(value, CultureInfo.InvariantCulture);
break;
case InternalPrimitiveTypeE.Single:
if (value == "INF")
var = Single.PositiveInfinity;
else if (value == "-INF")
var = Single.NegativeInfinity;
else
var = Single.Parse(value, CultureInfo.InvariantCulture);
break;
case InternalPrimitiveTypeE.Time:
var= SoapTime.Parse(value);
break;
case InternalPrimitiveTypeE.Date:
var= SoapDate.Parse(value);
break;
case InternalPrimitiveTypeE.YearMonth:
var= SoapYearMonth.Parse(value);
break;
case InternalPrimitiveTypeE.Year:
var= SoapYear.Parse(value);
break;
case InternalPrimitiveTypeE.MonthDay:
var= SoapMonthDay.Parse(value);
break;
case InternalPrimitiveTypeE.Day:
var= SoapDay.Parse(value);
break;
case InternalPrimitiveTypeE.Month:
var= SoapMonth.Parse(value);
break;
case InternalPrimitiveTypeE.HexBinary:
var= SoapHexBinary.Parse(value);
break;
case InternalPrimitiveTypeE.Base64Binary:
var= SoapBase64Binary.Parse(value);
break;
case InternalPrimitiveTypeE.Integer:
var= SoapInteger.Parse(value);
break;
case InternalPrimitiveTypeE.PositiveInteger:
var= SoapPositiveInteger.Parse(value);
break;
case InternalPrimitiveTypeE. NonPositiveInteger:
var= SoapNonPositiveInteger.Parse(value);
break;
case InternalPrimitiveTypeE.NonNegativeInteger:
var= SoapNonNegativeInteger.Parse(value);
break;
case InternalPrimitiveTypeE.NegativeInteger:
var= SoapNegativeInteger.Parse(value);
break;
case InternalPrimitiveTypeE.AnyUri:
var= SoapAnyUri.Parse(value);
break;
case InternalPrimitiveTypeE.QName:
var= SoapQName.Parse(value);
break;
case InternalPrimitiveTypeE.Notation:
var= SoapNotation.Parse(value);
break;
case InternalPrimitiveTypeE.NormalizedString:
var= SoapNormalizedString.Parse(value);
break;
case InternalPrimitiveTypeE.Token:
var= SoapToken.Parse(value);
break;
case InternalPrimitiveTypeE.Language:
var= SoapLanguage.Parse(value);
break;
case InternalPrimitiveTypeE.Name:
var= SoapName.Parse(value);
break;
case InternalPrimitiveTypeE.Idrefs:
var= SoapIdrefs.Parse(value);
break;
case InternalPrimitiveTypeE.Entities:
var= SoapEntities.Parse(value);
break;
case InternalPrimitiveTypeE.Nmtoken:
var= SoapNmtoken.Parse(value);
break;
case InternalPrimitiveTypeE.Nmtokens:
var= SoapNmtokens.Parse(value);
break;
case InternalPrimitiveTypeE.NcName:
var= SoapNcName.Parse(value);
break;
case InternalPrimitiveTypeE.Id:
var= SoapId.Parse(value);
break;
case InternalPrimitiveTypeE.Idref:
var= SoapIdref.Parse(value);
break;
case InternalPrimitiveTypeE.Entity:
var= SoapEntity.Parse(value);
break;
default:
// InternalPrimitiveTypeE needs to be a primitive type
InternalST.SoapAssert((code != InternalPrimitiveTypeE.Invalid), "[Converter.FromString]!InternalPrimitiveTypeE.Invalid ");
if (code != InternalPrimitiveTypeE.Invalid)
var = Convert.ChangeType(value, ToTypeCode(code), CultureInfo.InvariantCulture);
else
var = value;
break;
}
InternalST.Soap( "Converter", "FromString Exit "+((var == null)?"null":var+" var type "+((var==null)?"":var.GetType().ToString())));
return var;
}
internal static Type typeofISerializable = typeof(ISerializable);
internal static Type typeofString = typeof(String);
internal static Type typeofConverter = typeof(Converter);
internal static Type typeofBoolean = typeof(Boolean);
internal static Type typeofByte = typeof(Byte);
internal static Type typeofChar = typeof(Char);
internal static Type typeofDecimal = typeof(Decimal);
internal static Type typeofDouble = typeof(Double);
internal static Type typeofInt16 = typeof(Int16);
internal static Type typeofInt32 = typeof(Int32);
internal static Type typeofInt64 = typeof(Int64);
internal static Type typeofSByte = typeof(SByte);
internal static Type typeofSingle = typeof(Single);
internal static Type typeofTimeSpan = typeof(TimeSpan);
internal static Type typeofDateTime = typeof(DateTime);
internal static Type typeofUInt16 = typeof(UInt16);
internal static Type typeofUInt32 = typeof(UInt32);
internal static Type typeofUInt64 = typeof(UInt64);
internal static Type typeofSoapTime = typeof(SoapTime);
internal static Type typeofSoapDate = typeof(SoapDate);
internal static Type typeofSoapYear = typeof(SoapYear);
internal static Type typeofSoapMonthDay = typeof(SoapMonthDay);
internal static Type typeofSoapYearMonth = typeof(SoapYearMonth);
internal static Type typeofSoapDay = typeof(SoapDay);
internal static Type typeofSoapMonth = typeof(SoapMonth);
internal static Type typeofSoapHexBinary = typeof(SoapHexBinary);
internal static Type typeofSoapBase64Binary = typeof(SoapBase64Binary);
internal static Type typeofSoapInteger = typeof(SoapInteger);
internal static Type typeofSoapPositiveInteger = typeof(SoapPositiveInteger);
internal static Type typeofSoapNonPositiveInteger = typeof(SoapNonPositiveInteger);
internal static Type typeofSoapNonNegativeInteger = typeof(SoapNonNegativeInteger);
internal static Type typeofSoapNegativeInteger = typeof(SoapNegativeInteger);
internal static Type typeofSoapAnyUri = typeof(SoapAnyUri);
internal static Type typeofSoapQName = typeof(SoapQName);
internal static Type typeofSoapNotation = typeof(SoapNotation);
internal static Type typeofSoapNormalizedString = typeof(SoapNormalizedString);
internal static Type typeofSoapToken = typeof(SoapToken);
internal static Type typeofSoapLanguage = typeof(SoapLanguage);
internal static Type typeofSoapName = typeof(SoapName);
internal static Type typeofSoapIdrefs = typeof(SoapIdrefs);
internal static Type typeofSoapEntities = typeof(SoapEntities);
internal static Type typeofSoapNmtoken = typeof(SoapNmtoken);
internal static Type typeofSoapNmtokens = typeof(SoapNmtokens);
internal static Type typeofSoapNcName = typeof(SoapNcName);
internal static Type typeofSoapId = typeof(SoapId);
internal static Type typeofSoapIdref = typeof(SoapIdref);
internal static Type typeofSoapEntity = typeof(SoapEntity);
internal static Type typeofISoapXsd = typeof(ISoapXsd);
internal static Type typeofObject = typeof(Object);
internal static Type typeofSoapFault = typeof(SoapFault);
internal static Type typeofTypeArray = typeof(System.Type[]);
internal static Type typeofIConstructionCallMessage = typeof(System.Runtime.Remoting.Activation.IConstructionCallMessage);
internal static Type typeofIMethodCallMessage = typeof(System.Runtime.Remoting.Messaging.IMethodCallMessage);
internal static Type typeofReturnMessage = typeof(System.Runtime.Remoting.Messaging.ReturnMessage);
internal static Type typeofSystemVoid = typeof(void);
internal static Type typeofInternalSoapMessage = typeof(InternalSoapMessage);
internal static Type typeofHeader = typeof(System.Runtime.Remoting.Messaging.Header);
internal static Type typeofMarshalByRefObject = typeof(System.MarshalByRefObject);
internal static Assembly urtAssembly = Assembly.GetAssembly(typeofString);
internal static String urtAssemblyString = urtAssembly.FullName;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
//============================================================
//
// Class: Converter
//
// Author: Peter de Jong ([....])
//
// Purpose: Hexify and bin.base64 conversions
//
// Date: June 10, 1999
//
//===========================================================
namespace System.Runtime.Serialization.Formatters.Soap {
using System.Threading;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Metadata;
using System.Runtime.Remoting.Metadata.W3cXsd2001;
using System.Runtime.Serialization;
using System;
using System.Reflection;
using System.Globalization;
using System.Text;
using System.Security.Permissions;
sealed internal class Converter
{
private Converter()
{
}
private static int primitiveTypeEnumLength = 46; //Number of PrimitiveTypeEnums
// The following section are utilities to read and write XML types
// Translates a runtime type into an enumeration code
internal static InternalPrimitiveTypeE SoapToCode(Type type)
{
return ToCode(type);
}
internal static InternalPrimitiveTypeE ToCode(Type type)
{
InternalST.Soap("Converter", "ToCode Type Entry ",type," IsEnum "+type.IsEnum);
InternalPrimitiveTypeE code = InternalPrimitiveTypeE.Invalid;
if (type.IsEnum)
return code = InternalPrimitiveTypeE.Invalid;
TypeCode typeCode = Type.GetTypeCode(type);
if (typeCode == TypeCode.Object)
{
if (typeofISoapXsd.IsAssignableFrom(type))
{
if (type == typeofSoapTime)
code = InternalPrimitiveTypeE.Time;
else if (type == typeofSoapDate)
code = InternalPrimitiveTypeE.Date;
else if (type == typeofSoapYearMonth)
code = InternalPrimitiveTypeE.YearMonth;
else if (type == typeofSoapYear)
code = InternalPrimitiveTypeE.Year;
else if (type == typeofSoapMonthDay)
code = InternalPrimitiveTypeE.MonthDay;
else if (type == typeofSoapDay)
code = InternalPrimitiveTypeE.Day;
else if (type == typeofSoapMonth)
code = InternalPrimitiveTypeE.Month;
else if (type == typeofSoapHexBinary)
code = InternalPrimitiveTypeE.HexBinary;
else if (type == typeofSoapBase64Binary)
code = InternalPrimitiveTypeE.Base64Binary;
else if (type == typeofSoapInteger)
code = InternalPrimitiveTypeE.Integer;
else if (type == typeofSoapPositiveInteger)
code = InternalPrimitiveTypeE.PositiveInteger;
else if (type == typeofSoapNonPositiveInteger)
code = InternalPrimitiveTypeE.NonPositiveInteger;
else if (type == typeofSoapNonNegativeInteger)
code = InternalPrimitiveTypeE.NonNegativeInteger;
else if (type == typeofSoapNegativeInteger)
code = InternalPrimitiveTypeE.NegativeInteger;
else if (type == typeofSoapAnyUri)
code = InternalPrimitiveTypeE.AnyUri;
else if (type == typeofSoapQName)
code = InternalPrimitiveTypeE.QName;
else if (type == typeofSoapNotation)
code = InternalPrimitiveTypeE.Notation;
else if (type == typeofSoapNormalizedString)
code = InternalPrimitiveTypeE.NormalizedString;
else if (type == typeofSoapToken)
code = InternalPrimitiveTypeE.Token;
else if (type == typeofSoapLanguage)
code = InternalPrimitiveTypeE.Language;
else if (type == typeofSoapName)
code = InternalPrimitiveTypeE.Name;
else if (type == typeofSoapIdrefs)
code = InternalPrimitiveTypeE.Idrefs;
else if (type == typeofSoapEntities)
code = InternalPrimitiveTypeE.Entities;
else if (type == typeofSoapNmtoken)
code = InternalPrimitiveTypeE.Nmtoken;
else if (type == typeofSoapNmtokens)
code = InternalPrimitiveTypeE.Nmtokens;
else if (type == typeofSoapNcName)
code = InternalPrimitiveTypeE.NcName;
else if (type == typeofSoapId)
code = InternalPrimitiveTypeE.Id;
else if (type == typeofSoapIdref)
code = InternalPrimitiveTypeE.Idref;
else if (type == typeofSoapEntity)
code = InternalPrimitiveTypeE.Entity;
}
else
{
if (type == typeofTimeSpan)
code = InternalPrimitiveTypeE.TimeSpan;
else
code = InternalPrimitiveTypeE.Invalid;
}
}
else
code = ToPrimitiveTypeEnum(typeCode);
InternalST.Soap("Converter", "ToCode Exit " , ((Enum)code).ToString());
return code;
}
// Translates a String into a runtime type enumeration code.
// The types translated are COM+ runtime types and XML Data Types
internal static InternalPrimitiveTypeE ToCode(String value)
{
InternalST.Soap("Converter", "ToCode String Entry ",value);
if (value == null)
throw new ArgumentNullException("serParser", String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("ArgumentNull_WithParamName"), value));
String lxsdType = value.ToLower(CultureInfo.InvariantCulture);
Char firstChar = lxsdType[0];
InternalPrimitiveTypeE code = InternalPrimitiveTypeE.Invalid;
switch (firstChar)
{
case 'a':
if (lxsdType == "anyuri")
code = InternalPrimitiveTypeE.AnyUri;
break;
case 'b':
if (lxsdType == "boolean")
code = InternalPrimitiveTypeE.Boolean;
else if (lxsdType == "byte")
code = InternalPrimitiveTypeE.SByte;
else if (lxsdType == "base64binary")
code = InternalPrimitiveTypeE.Base64Binary;
else if (lxsdType == "base64")
code = InternalPrimitiveTypeE.Base64Binary;
break;
case 'c':
if ((lxsdType == "char") || (lxsdType == "character")) // Not xsd types
code = InternalPrimitiveTypeE.Char;
break;
case 'd':
if (lxsdType == "double")
code = InternalPrimitiveTypeE.Double;
if (lxsdType == "datetime")
code = InternalPrimitiveTypeE.DateTime;
else if (lxsdType == "duration")
code = InternalPrimitiveTypeE.TimeSpan;
else if (lxsdType == "date")
code = InternalPrimitiveTypeE.Date;
else if (lxsdType == "decimal")
code = InternalPrimitiveTypeE.Decimal;
break;
case 'e':
if (lxsdType == "entities")
code = InternalPrimitiveTypeE.Entities;
else if (lxsdType == "entity")
code = InternalPrimitiveTypeE.Entity;
break;
case 'f':
if (lxsdType == "float")
code = InternalPrimitiveTypeE.Single;
break;
case 'g':
if (lxsdType == "gyearmonth")
code = InternalPrimitiveTypeE.YearMonth;
else if (lxsdType == "gyear")
code = InternalPrimitiveTypeE.Year;
else if (lxsdType == "gmonthday")
code = InternalPrimitiveTypeE.MonthDay;
else if (lxsdType == "gday")
code = InternalPrimitiveTypeE.Day;
else if (lxsdType == "gmonth")
code = InternalPrimitiveTypeE.Month;
break;
case 'h':
if (lxsdType == "hexbinary")
code = InternalPrimitiveTypeE.HexBinary;
break;
case 'i':
if (lxsdType == "int")
code = InternalPrimitiveTypeE.Int32;
if (lxsdType == "integer")
code = InternalPrimitiveTypeE.Integer;
else if (lxsdType == "idrefs")
code = InternalPrimitiveTypeE.Idrefs;
else if (lxsdType == "id")
code = InternalPrimitiveTypeE.Id;
else if (lxsdType == "idref")
code = InternalPrimitiveTypeE.Idref;
break;
case 'l':
if (lxsdType == "long")
code = InternalPrimitiveTypeE.Int64;
else if (lxsdType == "language")
code = InternalPrimitiveTypeE.Language;
break;
case 'n':
if (lxsdType == "number") //No longer used
code = InternalPrimitiveTypeE.Decimal;
else if (lxsdType == "normalizedstring")
code = InternalPrimitiveTypeE.NormalizedString;
else if (lxsdType == "nonpositiveinteger")
code = InternalPrimitiveTypeE.NonPositiveInteger;
else if (lxsdType == "negativeinteger")
code = InternalPrimitiveTypeE.NegativeInteger;
else if (lxsdType == "nonnegativeinteger")
code = InternalPrimitiveTypeE.NonNegativeInteger;
else if (lxsdType == "notation")
code = InternalPrimitiveTypeE.Notation;
else if (lxsdType == "nmtoken")
code = InternalPrimitiveTypeE.Nmtoken;
else if (lxsdType == "nmtokens")
code = InternalPrimitiveTypeE.Nmtokens;
else if (lxsdType == "name")
code = InternalPrimitiveTypeE.Name;
else if (lxsdType == "ncname")
code = InternalPrimitiveTypeE.NcName;
break;
case 'p':
if (lxsdType == "positiveinteger")
code = InternalPrimitiveTypeE.PositiveInteger;
break;
case 'q':
if (lxsdType == "qname")
code = InternalPrimitiveTypeE.QName;
break;
case 's':
if (lxsdType == "short")
code = InternalPrimitiveTypeE.Int16;
else if (lxsdType == "system.byte") // used during serialization
code = InternalPrimitiveTypeE.Byte;
else if (lxsdType == "system.sbyte") // used during serialization
code = InternalPrimitiveTypeE.SByte;
else if (lxsdType == "system") //used during serialization
code = ToCode(value.Substring(7));
else if (lxsdType == "system.runtime.remoting.metadata") //used during serialization
code = ToCode(value.Substring(33));
break;
case 't':
if (lxsdType == "time")
code = InternalPrimitiveTypeE.Time;
else if (lxsdType == "token")
code = InternalPrimitiveTypeE.Token;
else if (lxsdType == "timeinstant")
code = InternalPrimitiveTypeE.DateTime;
else if (lxsdType == "timeduration")
code = InternalPrimitiveTypeE.TimeSpan;
break;
case 'u':
if (lxsdType == "unsignedlong")
code = InternalPrimitiveTypeE.UInt64;
else if (lxsdType == "unsignedint")
code = InternalPrimitiveTypeE.UInt32;
else if (lxsdType == "unsignedshort")
code = InternalPrimitiveTypeE.UInt16;
else if (lxsdType == "unsignedbyte")
code = InternalPrimitiveTypeE.Byte;
break;
default:
code = InternalPrimitiveTypeE.Invalid;
break;
}
InternalST.Soap("Converter", "ToCode Exit ", ((Enum)code).ToString());
return code;
}
internal static bool IsWriteAsByteArray(InternalPrimitiveTypeE code)
{
bool isWrite = false;
switch (code)
{
case InternalPrimitiveTypeE.Boolean:
case InternalPrimitiveTypeE.Char:
case InternalPrimitiveTypeE.Byte:
case InternalPrimitiveTypeE.Double:
case InternalPrimitiveTypeE.Int16:
case InternalPrimitiveTypeE.Int32:
case InternalPrimitiveTypeE.Int64:
case InternalPrimitiveTypeE.SByte:
case InternalPrimitiveTypeE.Single:
case InternalPrimitiveTypeE.UInt16:
case InternalPrimitiveTypeE.UInt32:
case InternalPrimitiveTypeE.UInt64:
isWrite = true;
break;
}
return isWrite;
}
internal static InternalNameSpaceE GetNameSpaceEnum(InternalPrimitiveTypeE code, Type type, WriteObjectInfo objectInfo, out String typeName)
{
InternalST.Soap("Converter", "GetNameSpaceEnum Entry ",((Enum)code).ToString()," type ",type);
InternalNameSpaceE nameSpaceEnum = InternalNameSpaceE.None;
typeName = null;
if (code != InternalPrimitiveTypeE.Invalid)
{
if (code == InternalPrimitiveTypeE.Char)
{
nameSpaceEnum = InternalNameSpaceE.UrtSystem;
typeName = "System.Char";
}
else
{
nameSpaceEnum = InternalNameSpaceE.XdrPrimitive;
typeName = ToXmlDataType(code);
}
}
if ((nameSpaceEnum == InternalNameSpaceE.None) && (type != null))
{
if (type == typeofString)
nameSpaceEnum = InternalNameSpaceE.XdrString;
else
{
if (objectInfo == null)
{
typeName = type.FullName;
if (type.Module.Assembly == urtAssembly)
nameSpaceEnum = InternalNameSpaceE.UrtSystem;
else
nameSpaceEnum = InternalNameSpaceE.UrtUser;
}
else
{
typeName = objectInfo.GetTypeFullName();
// If objref is created from a proxy, it will have the proxy namespace
// Need to force ObjRef to have system namespace
if (objectInfo.GetAssemblyString().Equals(urtAssemblyString))
nameSpaceEnum = InternalNameSpaceE.UrtSystem;
else
nameSpaceEnum = InternalNameSpaceE.UrtUser;
}
}
}
// If there is an explicitly specified namespace, then it is used
if (objectInfo != null)
{
if (!objectInfo.isSi &&
(objectInfo.IsAttributeNameSpace() ||
objectInfo.IsCustomXmlAttribute() ||
objectInfo.IsCustomXmlElement()))
{
nameSpaceEnum = InternalNameSpaceE.Interop;
}
else if (objectInfo.IsCallElement())
{
nameSpaceEnum = InternalNameSpaceE.CallElement;
}
}
InternalST.Soap("Converter", "GetNameSpaceEnum Exit ", ((Enum)nameSpaceEnum).ToString()," typeName ",typeName);
return nameSpaceEnum;
}
// Primitive types for which types need to be transmitted in Soap for ISerialable
internal static bool IsSiTransmitType(InternalPrimitiveTypeE code)
{
switch (code)
{
case InternalPrimitiveTypeE.TimeSpan:
case InternalPrimitiveTypeE.DateTime:
case InternalPrimitiveTypeE.Time:
case InternalPrimitiveTypeE.Date:
case InternalPrimitiveTypeE.YearMonth:
case InternalPrimitiveTypeE.Year:
case InternalPrimitiveTypeE.MonthDay:
case InternalPrimitiveTypeE.Day:
case InternalPrimitiveTypeE.Month:
case InternalPrimitiveTypeE.HexBinary:
case InternalPrimitiveTypeE.Base64Binary:
case InternalPrimitiveTypeE.Integer:
case InternalPrimitiveTypeE.PositiveInteger:
case InternalPrimitiveTypeE. NonPositiveInteger:
case InternalPrimitiveTypeE.NonNegativeInteger:
case InternalPrimitiveTypeE.NegativeInteger:
case InternalPrimitiveTypeE.AnyUri:
case InternalPrimitiveTypeE.QName:
case InternalPrimitiveTypeE.Notation:
case InternalPrimitiveTypeE.NormalizedString:
case InternalPrimitiveTypeE.Token:
case InternalPrimitiveTypeE.Language:
case InternalPrimitiveTypeE.Name:
case InternalPrimitiveTypeE.Idrefs:
case InternalPrimitiveTypeE.Entities:
case InternalPrimitiveTypeE.Nmtoken:
case InternalPrimitiveTypeE.Nmtokens:
case InternalPrimitiveTypeE.NcName:
case InternalPrimitiveTypeE.Id:
case InternalPrimitiveTypeE.Idref:
case InternalPrimitiveTypeE.Entity:
case InternalPrimitiveTypeE.Invalid:
return true;
default:
return false;
}
}
private static Type[] typeA;
private static void InitTypeA()
{
typeA = new Type[primitiveTypeEnumLength];
typeA[(int)InternalPrimitiveTypeE.Invalid] = null;
typeA[(int)InternalPrimitiveTypeE.Boolean] = typeofBoolean;
typeA[(int)InternalPrimitiveTypeE.Byte] = typeofByte;
typeA[(int)InternalPrimitiveTypeE.Char] = typeofChar;
typeA[(int)InternalPrimitiveTypeE.Decimal] = typeofDecimal;
typeA[(int)InternalPrimitiveTypeE.Double] = typeofDouble;
typeA[(int)InternalPrimitiveTypeE.Int16] = typeofInt16;
typeA[(int)InternalPrimitiveTypeE.Int32] = typeofInt32;
typeA[(int)InternalPrimitiveTypeE.Int64] = typeofInt64;
typeA[(int)InternalPrimitiveTypeE.SByte] = typeofSByte;
typeA[(int)InternalPrimitiveTypeE.Single] = typeofSingle;
typeA[(int)InternalPrimitiveTypeE.TimeSpan] = typeofTimeSpan;
typeA[(int)InternalPrimitiveTypeE.DateTime] = typeofDateTime;
typeA[(int)InternalPrimitiveTypeE.UInt16] = typeofUInt16;
typeA[(int)InternalPrimitiveTypeE.UInt32] = typeofUInt32;
typeA[(int)InternalPrimitiveTypeE.UInt64] = typeofUInt64;
typeA[(int)InternalPrimitiveTypeE.Time] = typeofSoapTime;
typeA[(int)InternalPrimitiveTypeE.Date] = typeofSoapDate;
typeA[(int)InternalPrimitiveTypeE.YearMonth] = typeofSoapYearMonth;
typeA[(int)InternalPrimitiveTypeE.Year] = typeofSoapYear;
typeA[(int)InternalPrimitiveTypeE.MonthDay] = typeofSoapMonthDay;
typeA[(int)InternalPrimitiveTypeE.Day] = typeofSoapDay;
typeA[(int)InternalPrimitiveTypeE.Month] = typeofSoapMonth;
typeA[(int)InternalPrimitiveTypeE.HexBinary] = typeofSoapHexBinary;
typeA[(int)InternalPrimitiveTypeE.Base64Binary] = typeofSoapBase64Binary;
typeA[(int)InternalPrimitiveTypeE.Integer] = typeofSoapInteger;
typeA[(int)InternalPrimitiveTypeE.PositiveInteger] = typeofSoapPositiveInteger;
typeA[(int)InternalPrimitiveTypeE.NonPositiveInteger] = typeofSoapNonPositiveInteger;
typeA[(int)InternalPrimitiveTypeE.NonNegativeInteger] = typeofSoapNonNegativeInteger;
typeA[(int)InternalPrimitiveTypeE.NegativeInteger] = typeofSoapNegativeInteger;
typeA[(int)InternalPrimitiveTypeE.AnyUri] = typeofSoapAnyUri;
typeA[(int)InternalPrimitiveTypeE.QName] = typeofSoapQName;
typeA[(int)InternalPrimitiveTypeE.Notation] = typeofSoapNotation;
typeA[(int)InternalPrimitiveTypeE.NormalizedString] = typeofSoapNormalizedString;
typeA[(int)InternalPrimitiveTypeE.Token] = typeofSoapToken;
typeA[(int)InternalPrimitiveTypeE.Language] = typeofSoapLanguage;
typeA[(int)InternalPrimitiveTypeE.Name] = typeofSoapName;
typeA[(int)InternalPrimitiveTypeE.Idrefs] = typeofSoapIdrefs;
typeA[(int)InternalPrimitiveTypeE.Entities] = typeofSoapEntities;
typeA[(int)InternalPrimitiveTypeE.Nmtoken] = typeofSoapNmtoken;
typeA[(int)InternalPrimitiveTypeE.Nmtokens] = typeofSoapNmtokens;
typeA[(int)InternalPrimitiveTypeE.NcName] = typeofSoapNcName;
typeA[(int)InternalPrimitiveTypeE.Id] = typeofSoapId;
typeA[(int)InternalPrimitiveTypeE.Idref] = typeofSoapIdref;
typeA[(int)InternalPrimitiveTypeE.Entity] = typeofSoapEntity;
}
// Returns a COM runtime type associated with the type code
internal static Type SoapToType(InternalPrimitiveTypeE code)
{
return ToType(code);
}
internal static Type ToType(InternalPrimitiveTypeE code)
{
InternalST.Soap("Converter", "ToType Entry ", ((Enum)code).ToString());
lock(typeofConverter)
{
if (typeA == null)
InitTypeA();
}
InternalST.Soap("Converter", "ToType Exit ", ((typeA[(int)code] == null)?"null ":typeA[(int)code].Name));
return typeA[(int)code];
}
private static String[] valueA;
private static void InitValueA()
{
valueA = new String[primitiveTypeEnumLength];
valueA[(int)InternalPrimitiveTypeE.Invalid] = null;
valueA[(int)InternalPrimitiveTypeE.Boolean] = "System.Boolean";
valueA[(int)InternalPrimitiveTypeE.Byte] = "System.Byte";
valueA[(int)InternalPrimitiveTypeE.Char] = "System.Char";
valueA[(int)InternalPrimitiveTypeE.Decimal] = "System.Decimal";
valueA[(int)InternalPrimitiveTypeE.Double] = "System.Double";
valueA[(int)InternalPrimitiveTypeE.Int16] = "System.Int16";
valueA[(int)InternalPrimitiveTypeE.Int32] = "System.Int32";
valueA[(int)InternalPrimitiveTypeE.Int64] = "System.Int64";
valueA[(int)InternalPrimitiveTypeE.SByte] = "System.SByte";
valueA[(int)InternalPrimitiveTypeE.Single] = "System.Single";
valueA[(int)InternalPrimitiveTypeE.TimeSpan] = "System.TimeSpan";
valueA[(int)InternalPrimitiveTypeE.DateTime] = "System.DateTime";
valueA[(int)InternalPrimitiveTypeE.UInt16] = "System.UInt16";
valueA[(int)InternalPrimitiveTypeE.UInt32] = "System.UInt32";
valueA[(int)InternalPrimitiveTypeE.UInt64] = "System.UInt64";
valueA[(int)InternalPrimitiveTypeE.Time] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapTime";
valueA[(int)InternalPrimitiveTypeE.Date] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapDate";
valueA[(int)InternalPrimitiveTypeE.YearMonth] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapYearMonth";
valueA[(int)InternalPrimitiveTypeE.Year] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapYear";
valueA[(int)InternalPrimitiveTypeE.MonthDay] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapMonthDay";
valueA[(int)InternalPrimitiveTypeE.Day] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapDay";
valueA[(int)InternalPrimitiveTypeE.Month] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapMonth";
valueA[(int)InternalPrimitiveTypeE.HexBinary] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary";
valueA[(int)InternalPrimitiveTypeE.Base64Binary] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapBase64Binary";
valueA[(int)InternalPrimitiveTypeE.Integer] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapInteger";
valueA[(int)InternalPrimitiveTypeE.PositiveInteger] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapPositiveInteger";
valueA[(int)InternalPrimitiveTypeE.NonPositiveInteger] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNonPositiveInteger";
valueA[(int)InternalPrimitiveTypeE.NonNegativeInteger] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNonNegativeInteger";
valueA[(int)InternalPrimitiveTypeE.NegativeInteger] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNegativeInteger";
valueA[(int)InternalPrimitiveTypeE.AnyUri] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapAnyUri";
valueA[(int)InternalPrimitiveTypeE.QName] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapQName";
valueA[(int)InternalPrimitiveTypeE.Notation] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNotation";
valueA[(int)InternalPrimitiveTypeE.NormalizedString] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNormalizedString";
valueA[(int)InternalPrimitiveTypeE.Token] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapToken";
valueA[(int)InternalPrimitiveTypeE.Language] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapLanguage";
valueA[(int)InternalPrimitiveTypeE.Name] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapName";
valueA[(int)InternalPrimitiveTypeE.Idrefs] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapIdrefs";
valueA[(int)InternalPrimitiveTypeE.Entities] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapEntities";
valueA[(int)InternalPrimitiveTypeE.Nmtoken] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNmtoken";
valueA[(int)InternalPrimitiveTypeE.Nmtokens] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNmtokens";
valueA[(int)InternalPrimitiveTypeE.NcName] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapNcName";
valueA[(int)InternalPrimitiveTypeE.Id] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapId";
valueA[(int)InternalPrimitiveTypeE.Idref] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapIdref";
valueA[(int)InternalPrimitiveTypeE.Entity] = "System.Runtime.Remoting.Metadata.W3cXsd2001.SoapEntity";
}
// Returns a String containg a COM+ runtime type associated with the type code
internal static String SoapToComType(InternalPrimitiveTypeE code)
{
return ToComType(code);
}
internal static String ToComType(InternalPrimitiveTypeE code)
{
InternalST.Soap("Converter", "ToComType Entry ", ((Enum)code).ToString());
lock(typeofConverter)
{
if (valueA == null)
InitValueA();
}
InternalST.Soap("Converter", "ToComType Exit ",((valueA[(int)code] == null)?"null":valueA[(int)code]));
return valueA[(int)code];
}
private static String[] valueB;
private static void InitValueB()
{
valueB = new String[primitiveTypeEnumLength];
valueB[(int)InternalPrimitiveTypeE.Invalid] = null;
valueB[(int)InternalPrimitiveTypeE.Boolean] = "boolean";
valueB[(int)InternalPrimitiveTypeE.Byte] = "unsignedByte";
valueB[(int)InternalPrimitiveTypeE.Char] = "char"; //not an xsi type, but will cause problems with clr if char is not used
valueB[(int)InternalPrimitiveTypeE.Decimal] = "decimal";
valueB[(int)InternalPrimitiveTypeE.Double] = "double";
valueB[(int)InternalPrimitiveTypeE.Int16] = "short";
valueB[(int)InternalPrimitiveTypeE.Int32] = "int";
valueB[(int)InternalPrimitiveTypeE.Int64] = "long";
valueB[(int)InternalPrimitiveTypeE.SByte] = "byte";
valueB[(int)InternalPrimitiveTypeE.Single] = "float";
valueB[(int)InternalPrimitiveTypeE.TimeSpan] = "duration";
valueB[(int)InternalPrimitiveTypeE.DateTime] = "dateTime";
valueB[(int)InternalPrimitiveTypeE.UInt16] = "unsignedShort";
valueB[(int)InternalPrimitiveTypeE.UInt32] = "unsignedInt";
valueB[(int)InternalPrimitiveTypeE.UInt64] = "unsignedLong";
valueB[(int)InternalPrimitiveTypeE.Time] = SoapTime.XsdType;
valueB[(int)InternalPrimitiveTypeE.Date] = SoapDate.XsdType;
valueB[(int)InternalPrimitiveTypeE.YearMonth] = SoapYearMonth.XsdType;
valueB[(int)InternalPrimitiveTypeE.Year] = SoapYear.XsdType;
valueB[(int)InternalPrimitiveTypeE.MonthDay] = SoapMonthDay.XsdType;
valueB[(int)InternalPrimitiveTypeE.Day] = SoapDay.XsdType;
valueB[(int)InternalPrimitiveTypeE.Month] = SoapMonth.XsdType;
valueB[(int)InternalPrimitiveTypeE.HexBinary] = SoapHexBinary.XsdType;
valueB[(int)InternalPrimitiveTypeE.Base64Binary] = SoapBase64Binary.XsdType;
valueB[(int)InternalPrimitiveTypeE.Integer] = SoapInteger.XsdType;
valueB[(int)InternalPrimitiveTypeE.PositiveInteger] = SoapPositiveInteger.XsdType;
valueB[(int)InternalPrimitiveTypeE.NonPositiveInteger] = SoapNonPositiveInteger.XsdType;
valueB[(int)InternalPrimitiveTypeE.NonNegativeInteger] = SoapNonNegativeInteger.XsdType;
valueB[(int)InternalPrimitiveTypeE.NegativeInteger] = SoapNegativeInteger.XsdType;
valueB[(int)InternalPrimitiveTypeE.AnyUri] = SoapAnyUri.XsdType;
valueB[(int)InternalPrimitiveTypeE.QName] = SoapQName.XsdType;
valueB[(int)InternalPrimitiveTypeE.Notation] = SoapNotation.XsdType;
valueB[(int)InternalPrimitiveTypeE.NormalizedString] = SoapNormalizedString.XsdType;
valueB[(int)InternalPrimitiveTypeE.Token] = SoapToken.XsdType;
valueB[(int)InternalPrimitiveTypeE.Language] = SoapLanguage.XsdType;
valueB[(int)InternalPrimitiveTypeE.Name] = SoapName.XsdType;
valueB[(int)InternalPrimitiveTypeE.Idrefs] = SoapIdrefs.XsdType;
valueB[(int)InternalPrimitiveTypeE.Entities] = SoapEntities.XsdType;
valueB[(int)InternalPrimitiveTypeE.Nmtoken] = SoapNmtoken.XsdType;
valueB[(int)InternalPrimitiveTypeE.Nmtokens] = SoapNmtokens.XsdType;
valueB[(int)InternalPrimitiveTypeE.NcName] = SoapNcName.XsdType;
valueB[(int)InternalPrimitiveTypeE.Id] = SoapId.XsdType;
valueB[(int)InternalPrimitiveTypeE.Idref] = SoapIdref.XsdType;
valueB[(int)InternalPrimitiveTypeE.Entity] = SoapEntity.XsdType;
}
// Returns a String containg an XML Data type associated with the type code
internal static String ToXmlDataType(InternalPrimitiveTypeE code)
{
InternalST.Soap( "Converter", "ToXmlDataType Entry ", ((Enum)code).ToString());
lock(typeofConverter)
{
if (valueB == null)
InitValueB();
}
InternalST.Soap( "Converter", "ToXmlDataType Exit ",((valueB[(int)code] == null)?"null":valueB[(int)code]));
return valueB[(int)code];
}
private static TypeCode[] typeCodeA;
private static void InitTypeCodeA()
{
typeCodeA = new TypeCode[primitiveTypeEnumLength];
typeCodeA[(int)InternalPrimitiveTypeE.Invalid] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Boolean] = TypeCode.Boolean;
typeCodeA[(int)InternalPrimitiveTypeE.Byte] = TypeCode.Byte;
typeCodeA[(int)InternalPrimitiveTypeE.Char] = TypeCode.Char;
typeCodeA[(int)InternalPrimitiveTypeE.Decimal] = TypeCode.Decimal;
typeCodeA[(int)InternalPrimitiveTypeE.Double] = TypeCode.Double;
typeCodeA[(int)InternalPrimitiveTypeE.Int16] = TypeCode.Int16;
typeCodeA[(int)InternalPrimitiveTypeE.Int32] = TypeCode.Int32;
typeCodeA[(int)InternalPrimitiveTypeE.Int64] = TypeCode.Int64;
typeCodeA[(int)InternalPrimitiveTypeE.SByte] = TypeCode.SByte;
typeCodeA[(int)InternalPrimitiveTypeE.Single] = TypeCode.Single;
typeCodeA[(int)InternalPrimitiveTypeE.TimeSpan] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.DateTime] = TypeCode.DateTime;
typeCodeA[(int)InternalPrimitiveTypeE.UInt16] = TypeCode.UInt16;
typeCodeA[(int)InternalPrimitiveTypeE.UInt32] = TypeCode.UInt32;
typeCodeA[(int)InternalPrimitiveTypeE.UInt64] = TypeCode.UInt64;
typeCodeA[(int)InternalPrimitiveTypeE.Time] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Date] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.YearMonth] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Year] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.MonthDay] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Day] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Month] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.HexBinary] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Base64Binary] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Integer] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.PositiveInteger] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.NonPositiveInteger] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.NonNegativeInteger] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.NegativeInteger] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.AnyUri] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.QName] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Notation] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.NormalizedString] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Token] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Language] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Name] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Idrefs] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Entities] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Nmtoken] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Nmtokens] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.NcName] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Id] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Idref] = TypeCode.Object;
typeCodeA[(int)InternalPrimitiveTypeE.Entity] = TypeCode.Object;
}
// Returns a System.TypeCode from a InternalPrimitiveTypeE
internal static TypeCode ToTypeCode(InternalPrimitiveTypeE code)
{
lock(typeofConverter)
{
if (typeCodeA == null)
InitTypeCodeA();
}
return typeCodeA[(int)code];
}
private static InternalPrimitiveTypeE[] codeA;
private static void InitCodeA()
{
codeA = new InternalPrimitiveTypeE[19];
codeA[(int)TypeCode.Empty] = InternalPrimitiveTypeE.Invalid;
codeA[(int)TypeCode.Object] = InternalPrimitiveTypeE.Invalid;
codeA[(int)TypeCode.DBNull] = InternalPrimitiveTypeE.Invalid;
codeA[(int)TypeCode.Boolean] = InternalPrimitiveTypeE.Boolean;
codeA[(int)TypeCode.Char] = InternalPrimitiveTypeE.Char;
codeA[(int)TypeCode.SByte] = InternalPrimitiveTypeE.SByte;
codeA[(int)TypeCode.Byte] = InternalPrimitiveTypeE.Byte;
codeA[(int)TypeCode.Int16] = InternalPrimitiveTypeE.Int16;
codeA[(int)TypeCode.UInt16] = InternalPrimitiveTypeE.UInt16;
codeA[(int)TypeCode.Int32] = InternalPrimitiveTypeE.Int32;
codeA[(int)TypeCode.UInt32] = InternalPrimitiveTypeE.UInt32;
codeA[(int)TypeCode.Int64] = InternalPrimitiveTypeE.Int64;
codeA[(int)TypeCode.UInt64] = InternalPrimitiveTypeE.UInt64;
codeA[(int)TypeCode.Single] = InternalPrimitiveTypeE.Single;
codeA[(int)TypeCode.Double] = InternalPrimitiveTypeE.Double;
codeA[(int)TypeCode.Decimal] = InternalPrimitiveTypeE.Decimal;
codeA[(int)TypeCode.DateTime] = InternalPrimitiveTypeE.DateTime;
codeA[17] = InternalPrimitiveTypeE.Invalid;
codeA[(int)TypeCode.String] = InternalPrimitiveTypeE.Invalid;
//codeA[(int)TypeCode.TimeSpan] = InternalPrimitiveTypeE.TimeSpan;
}
// Returns a InternalPrimitiveTypeE from a System.TypeCode
internal static InternalPrimitiveTypeE ToPrimitiveTypeEnum(TypeCode typeCode)
{
lock(typeofConverter)
{
if (codeA == null)
InitCodeA();
}
return codeA[(int)typeCode];
}
//********************
private static bool[] escapeA;
private static void InitEscapeA()
{
escapeA = new bool[primitiveTypeEnumLength];
escapeA[(int)InternalPrimitiveTypeE.Invalid] = true;
escapeA[(int)InternalPrimitiveTypeE.Boolean] = false;
escapeA[(int)InternalPrimitiveTypeE.Byte] = false;
escapeA[(int)InternalPrimitiveTypeE.Char] = true;
escapeA[(int)InternalPrimitiveTypeE.Decimal] = false;
escapeA[(int)InternalPrimitiveTypeE.Double] = false;
escapeA[(int)InternalPrimitiveTypeE.Int16] = false;
escapeA[(int)InternalPrimitiveTypeE.Int32] = false;
escapeA[(int)InternalPrimitiveTypeE.Int64] = false;
escapeA[(int)InternalPrimitiveTypeE.SByte] = false;
escapeA[(int)InternalPrimitiveTypeE.Single] = false;
escapeA[(int)InternalPrimitiveTypeE.TimeSpan] = false;
escapeA[(int)InternalPrimitiveTypeE.DateTime] = false;
escapeA[(int)InternalPrimitiveTypeE.UInt16] = false;
escapeA[(int)InternalPrimitiveTypeE.UInt32] = false;
escapeA[(int)InternalPrimitiveTypeE.UInt64] = false;
escapeA[(int)InternalPrimitiveTypeE.Time] = false;
escapeA[(int)InternalPrimitiveTypeE.Date] = false;
escapeA[(int)InternalPrimitiveTypeE.YearMonth] = false;
escapeA[(int)InternalPrimitiveTypeE.Year] = false;
escapeA[(int)InternalPrimitiveTypeE.MonthDay] = false;
escapeA[(int)InternalPrimitiveTypeE.Day] = false;
escapeA[(int)InternalPrimitiveTypeE.Month] = false;
escapeA[(int)InternalPrimitiveTypeE.HexBinary] = false;
escapeA[(int)InternalPrimitiveTypeE.Base64Binary] = false;
escapeA[(int)InternalPrimitiveTypeE.Integer] = false;
escapeA[(int)InternalPrimitiveTypeE.PositiveInteger] = false;
escapeA[(int)InternalPrimitiveTypeE.NonPositiveInteger] = false;
escapeA[(int)InternalPrimitiveTypeE.NonNegativeInteger] = false;
escapeA[(int)InternalPrimitiveTypeE.NegativeInteger] = false;
escapeA[(int)InternalPrimitiveTypeE.AnyUri] = true;
escapeA[(int)InternalPrimitiveTypeE.QName] = true;
escapeA[(int)InternalPrimitiveTypeE.Notation] = true;
escapeA[(int)InternalPrimitiveTypeE.NormalizedString] = false;
escapeA[(int)InternalPrimitiveTypeE.Token] = true;
escapeA[(int)InternalPrimitiveTypeE.Language] = true;
escapeA[(int)InternalPrimitiveTypeE.Name] = true;
escapeA[(int)InternalPrimitiveTypeE.Idrefs] = true;
escapeA[(int)InternalPrimitiveTypeE.Entities] = true;
escapeA[(int)InternalPrimitiveTypeE.Nmtoken] = true;
escapeA[(int)InternalPrimitiveTypeE.Nmtokens] = true;
escapeA[(int)InternalPrimitiveTypeE.NcName] = true;
escapeA[(int)InternalPrimitiveTypeE.Id] = true;
escapeA[(int)InternalPrimitiveTypeE.Idref] = true;
escapeA[(int)InternalPrimitiveTypeE.Entity] = true;
}
// Checks if the string is escaped (XML escape characters)
internal static bool IsEscaped(InternalPrimitiveTypeE code)
{
lock(typeofConverter)
{
if (escapeA == null)
InitEscapeA();
}
return escapeA[(int)code];
}
// Translates an Object into a string with the COM+ runtime type name
//<
private static StringBuilder sb = new StringBuilder(30);
internal static String SoapToString(Object data, InternalPrimitiveTypeE code)
{
return ToString(data, code);
}
internal static String ToString(Object data, InternalPrimitiveTypeE code)
{
// Any changes here need to also be made in System.Runtime.Remoting.Message.cs::SoapCoerceArg
String value;
InternalST.Soap( "Converter", "ToString Entry ", ((data==null)?"":data.GetType().ToString())," ",data," " , ((Enum)code).ToString());
switch (code)
{
case InternalPrimitiveTypeE.Boolean:
bool b = (bool)data;
if (b)
value = "true";
else
value = "false";
break;
case InternalPrimitiveTypeE.TimeSpan:
value = SoapDuration.ToString((TimeSpan)data);
break;
case InternalPrimitiveTypeE.DateTime:
value = SoapDateTime.ToString((DateTime)data);
break;
case InternalPrimitiveTypeE.Invalid:
// ToString should not be called if data is an object or string
InternalST.SoapAssert(false, "[Converter.ToString]!InternalPrimitiveTypeE.Invalid ");
value = data.ToString();
break;
case InternalPrimitiveTypeE.Double:
Double doublevalue = (Double)data;
if (Double.IsPositiveInfinity(doublevalue))
value = "INF";
else if (Double.IsNegativeInfinity(doublevalue))
value = "-INF";
else
value = doublevalue.ToString("R", CultureInfo.InvariantCulture);
break;
case InternalPrimitiveTypeE.Single:
Single singlevalue = (Single)data;
if (Single.IsPositiveInfinity(singlevalue))
value = "INF";
else if (Single.IsNegativeInfinity(singlevalue))
value = "-INF";
else
value = singlevalue.ToString("R", CultureInfo.InvariantCulture);
break;
case InternalPrimitiveTypeE.Time:
case InternalPrimitiveTypeE.Date:
case InternalPrimitiveTypeE.YearMonth:
case InternalPrimitiveTypeE.Year:
case InternalPrimitiveTypeE.MonthDay:
case InternalPrimitiveTypeE.Day:
case InternalPrimitiveTypeE.Month:
case InternalPrimitiveTypeE.HexBinary:
case InternalPrimitiveTypeE.Base64Binary:
case InternalPrimitiveTypeE.Integer:
case InternalPrimitiveTypeE.PositiveInteger:
case InternalPrimitiveTypeE. NonPositiveInteger:
case InternalPrimitiveTypeE.NonNegativeInteger:
case InternalPrimitiveTypeE.NegativeInteger:
case InternalPrimitiveTypeE.AnyUri:
case InternalPrimitiveTypeE.QName:
case InternalPrimitiveTypeE.Notation:
case InternalPrimitiveTypeE.NormalizedString:
case InternalPrimitiveTypeE.Token:
case InternalPrimitiveTypeE.Language:
case InternalPrimitiveTypeE.Name:
case InternalPrimitiveTypeE.Idrefs:
case InternalPrimitiveTypeE.Entities:
case InternalPrimitiveTypeE.Nmtoken:
case InternalPrimitiveTypeE.Nmtokens:
case InternalPrimitiveTypeE.NcName:
case InternalPrimitiveTypeE.Id:
case InternalPrimitiveTypeE.Idref:
case InternalPrimitiveTypeE.Entity:
value = data.ToString();
break;
default:
value = (String)Convert.ChangeType(data, typeofString, CultureInfo.InvariantCulture);
break;
}
InternalST.Soap( "Converter", "ToString Exit ",value);
return value;
}
// Translates a string into an Object
internal static Object FromString(String value, InternalPrimitiveTypeE code)
{
Object var;
InternalST.Soap( "Converter", "FromString Entry ",value," " , ((Enum)code).ToString());
switch (code)
{
case InternalPrimitiveTypeE.Boolean:
if (value == "1" || value == "true")
var = (bool)true;
else if (value == "0" || value =="false")
var = (bool)false;
else
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_typeCoercion"),value, "Boolean"));
break;
case InternalPrimitiveTypeE.TimeSpan:
var = SoapDuration.Parse(value);
break;
case InternalPrimitiveTypeE.DateTime:
var = SoapDateTime.Parse(value);
break;
case InternalPrimitiveTypeE.Double:
if (value == "INF")
var = Double.PositiveInfinity;
else if (value == "-INF")
var = Double.NegativeInfinity;
else
var = Double.Parse(value, CultureInfo.InvariantCulture);
break;
case InternalPrimitiveTypeE.Single:
if (value == "INF")
var = Single.PositiveInfinity;
else if (value == "-INF")
var = Single.NegativeInfinity;
else
var = Single.Parse(value, CultureInfo.InvariantCulture);
break;
case InternalPrimitiveTypeE.Time:
var= SoapTime.Parse(value);
break;
case InternalPrimitiveTypeE.Date:
var= SoapDate.Parse(value);
break;
case InternalPrimitiveTypeE.YearMonth:
var= SoapYearMonth.Parse(value);
break;
case InternalPrimitiveTypeE.Year:
var= SoapYear.Parse(value);
break;
case InternalPrimitiveTypeE.MonthDay:
var= SoapMonthDay.Parse(value);
break;
case InternalPrimitiveTypeE.Day:
var= SoapDay.Parse(value);
break;
case InternalPrimitiveTypeE.Month:
var= SoapMonth.Parse(value);
break;
case InternalPrimitiveTypeE.HexBinary:
var= SoapHexBinary.Parse(value);
break;
case InternalPrimitiveTypeE.Base64Binary:
var= SoapBase64Binary.Parse(value);
break;
case InternalPrimitiveTypeE.Integer:
var= SoapInteger.Parse(value);
break;
case InternalPrimitiveTypeE.PositiveInteger:
var= SoapPositiveInteger.Parse(value);
break;
case InternalPrimitiveTypeE. NonPositiveInteger:
var= SoapNonPositiveInteger.Parse(value);
break;
case InternalPrimitiveTypeE.NonNegativeInteger:
var= SoapNonNegativeInteger.Parse(value);
break;
case InternalPrimitiveTypeE.NegativeInteger:
var= SoapNegativeInteger.Parse(value);
break;
case InternalPrimitiveTypeE.AnyUri:
var= SoapAnyUri.Parse(value);
break;
case InternalPrimitiveTypeE.QName:
var= SoapQName.Parse(value);
break;
case InternalPrimitiveTypeE.Notation:
var= SoapNotation.Parse(value);
break;
case InternalPrimitiveTypeE.NormalizedString:
var= SoapNormalizedString.Parse(value);
break;
case InternalPrimitiveTypeE.Token:
var= SoapToken.Parse(value);
break;
case InternalPrimitiveTypeE.Language:
var= SoapLanguage.Parse(value);
break;
case InternalPrimitiveTypeE.Name:
var= SoapName.Parse(value);
break;
case InternalPrimitiveTypeE.Idrefs:
var= SoapIdrefs.Parse(value);
break;
case InternalPrimitiveTypeE.Entities:
var= SoapEntities.Parse(value);
break;
case InternalPrimitiveTypeE.Nmtoken:
var= SoapNmtoken.Parse(value);
break;
case InternalPrimitiveTypeE.Nmtokens:
var= SoapNmtokens.Parse(value);
break;
case InternalPrimitiveTypeE.NcName:
var= SoapNcName.Parse(value);
break;
case InternalPrimitiveTypeE.Id:
var= SoapId.Parse(value);
break;
case InternalPrimitiveTypeE.Idref:
var= SoapIdref.Parse(value);
break;
case InternalPrimitiveTypeE.Entity:
var= SoapEntity.Parse(value);
break;
default:
// InternalPrimitiveTypeE needs to be a primitive type
InternalST.SoapAssert((code != InternalPrimitiveTypeE.Invalid), "[Converter.FromString]!InternalPrimitiveTypeE.Invalid ");
if (code != InternalPrimitiveTypeE.Invalid)
var = Convert.ChangeType(value, ToTypeCode(code), CultureInfo.InvariantCulture);
else
var = value;
break;
}
InternalST.Soap( "Converter", "FromString Exit "+((var == null)?"null":var+" var type "+((var==null)?"":var.GetType().ToString())));
return var;
}
internal static Type typeofISerializable = typeof(ISerializable);
internal static Type typeofString = typeof(String);
internal static Type typeofConverter = typeof(Converter);
internal static Type typeofBoolean = typeof(Boolean);
internal static Type typeofByte = typeof(Byte);
internal static Type typeofChar = typeof(Char);
internal static Type typeofDecimal = typeof(Decimal);
internal static Type typeofDouble = typeof(Double);
internal static Type typeofInt16 = typeof(Int16);
internal static Type typeofInt32 = typeof(Int32);
internal static Type typeofInt64 = typeof(Int64);
internal static Type typeofSByte = typeof(SByte);
internal static Type typeofSingle = typeof(Single);
internal static Type typeofTimeSpan = typeof(TimeSpan);
internal static Type typeofDateTime = typeof(DateTime);
internal static Type typeofUInt16 = typeof(UInt16);
internal static Type typeofUInt32 = typeof(UInt32);
internal static Type typeofUInt64 = typeof(UInt64);
internal static Type typeofSoapTime = typeof(SoapTime);
internal static Type typeofSoapDate = typeof(SoapDate);
internal static Type typeofSoapYear = typeof(SoapYear);
internal static Type typeofSoapMonthDay = typeof(SoapMonthDay);
internal static Type typeofSoapYearMonth = typeof(SoapYearMonth);
internal static Type typeofSoapDay = typeof(SoapDay);
internal static Type typeofSoapMonth = typeof(SoapMonth);
internal static Type typeofSoapHexBinary = typeof(SoapHexBinary);
internal static Type typeofSoapBase64Binary = typeof(SoapBase64Binary);
internal static Type typeofSoapInteger = typeof(SoapInteger);
internal static Type typeofSoapPositiveInteger = typeof(SoapPositiveInteger);
internal static Type typeofSoapNonPositiveInteger = typeof(SoapNonPositiveInteger);
internal static Type typeofSoapNonNegativeInteger = typeof(SoapNonNegativeInteger);
internal static Type typeofSoapNegativeInteger = typeof(SoapNegativeInteger);
internal static Type typeofSoapAnyUri = typeof(SoapAnyUri);
internal static Type typeofSoapQName = typeof(SoapQName);
internal static Type typeofSoapNotation = typeof(SoapNotation);
internal static Type typeofSoapNormalizedString = typeof(SoapNormalizedString);
internal static Type typeofSoapToken = typeof(SoapToken);
internal static Type typeofSoapLanguage = typeof(SoapLanguage);
internal static Type typeofSoapName = typeof(SoapName);
internal static Type typeofSoapIdrefs = typeof(SoapIdrefs);
internal static Type typeofSoapEntities = typeof(SoapEntities);
internal static Type typeofSoapNmtoken = typeof(SoapNmtoken);
internal static Type typeofSoapNmtokens = typeof(SoapNmtokens);
internal static Type typeofSoapNcName = typeof(SoapNcName);
internal static Type typeofSoapId = typeof(SoapId);
internal static Type typeofSoapIdref = typeof(SoapIdref);
internal static Type typeofSoapEntity = typeof(SoapEntity);
internal static Type typeofISoapXsd = typeof(ISoapXsd);
internal static Type typeofObject = typeof(Object);
internal static Type typeofSoapFault = typeof(SoapFault);
internal static Type typeofTypeArray = typeof(System.Type[]);
internal static Type typeofIConstructionCallMessage = typeof(System.Runtime.Remoting.Activation.IConstructionCallMessage);
internal static Type typeofIMethodCallMessage = typeof(System.Runtime.Remoting.Messaging.IMethodCallMessage);
internal static Type typeofReturnMessage = typeof(System.Runtime.Remoting.Messaging.ReturnMessage);
internal static Type typeofSystemVoid = typeof(void);
internal static Type typeofInternalSoapMessage = typeof(InternalSoapMessage);
internal static Type typeofHeader = typeof(System.Runtime.Remoting.Messaging.Header);
internal static Type typeofMarshalByRefObject = typeof(System.MarshalByRefObject);
internal static Assembly urtAssembly = Assembly.GetAssembly(typeofString);
internal static String urtAssemblyString = urtAssembly.FullName;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ZoneLinkButton.cs
- ChannelManager.cs
- ExtensionDataObject.cs
- SemanticTag.cs
- PreviewPageInfo.cs
- SQLByteStorage.cs
- CustomBindingElement.cs
- AssemblyResourceLoader.cs
- AssemblyLoader.cs
- MailAddress.cs
- CodeSnippetStatement.cs
- WebPartChrome.cs
- RegexCharClass.cs
- DataGridViewBand.cs
- FormsAuthenticationCredentials.cs
- CmsInterop.cs
- XmlSchemaExporter.cs
- HitTestFilterBehavior.cs
- NumericUpDown.cs
- EncoderExceptionFallback.cs
- EncryptedPackage.cs
- RuntimeComponentFilter.cs
- ToolStripSeparator.cs
- ToolboxItemSnapLineBehavior.cs
- metadatamappinghashervisitor.hashsourcebuilder.cs
- ListViewAutomationPeer.cs
- SingleResultAttribute.cs
- SecurityElement.cs
- ItemList.cs
- StrokeCollection2.cs
- Propagator.JoinPropagator.cs
- HttpProcessUtility.cs
- TileBrush.cs
- FixedSOMTableRow.cs
- WebPartDescription.cs
- MessageQueueTransaction.cs
- ObjectDataSourceMethodEventArgs.cs
- AsynchronousChannel.cs
- Soap.cs
- XmlQueryType.cs
- BamlStream.cs
- WebConfigurationFileMap.cs
- XmlCodeExporter.cs
- SQLSingle.cs
- KeySplineConverter.cs
- SHA512.cs
- FixedBufferAttribute.cs
- StrokeDescriptor.cs
- UserControlFileEditor.cs
- HttpApplicationFactory.cs
- IPGlobalProperties.cs
- HitTestParameters3D.cs
- ParamArrayAttribute.cs
- MachineKeyConverter.cs
- RecordManager.cs
- Win32.cs
- ScaleTransform.cs
- XmlReaderSettings.cs
- BitmapEffectOutputConnector.cs
- RectangleConverter.cs
- LabelAutomationPeer.cs
- WebPartEditorApplyVerb.cs
- StickyNoteHelper.cs
- InstanceDescriptor.cs
- WebServiceTypeData.cs
- SettingsBindableAttribute.cs
- AttributeEmitter.cs
- XmlReturnReader.cs
- XmlMapping.cs
- WeakReference.cs
- IWorkflowDebuggerService.cs
- GeneralTransform3D.cs
- DataGridViewAccessibleObject.cs
- ToolboxComponentsCreatingEventArgs.cs
- Predicate.cs
- HtmlInputText.cs
- FlowLayoutSettings.cs
- StreamSecurityUpgradeAcceptorAsyncResult.cs
- CTreeGenerator.cs
- ToolConsole.cs
- XmlTextEncoder.cs
- ObfuscateAssemblyAttribute.cs
- XmlSchemaParticle.cs
- FactorySettingsElement.cs
- ValueChangedEventManager.cs
- Vector3D.cs
- LocalizationComments.cs
- StrokeDescriptor.cs
- UnaryNode.cs
- PermissionAttributes.cs
- ChangesetResponse.cs
- ChannelOptions.cs
- DragStartedEventArgs.cs
- SpecularMaterial.cs
- Decoder.cs
- FlowDocumentPaginator.cs
- DesignerTextViewAdapter.cs
- DesignerAttribute.cs
- TextTreeExtractElementUndoUnit.cs
- RuntimeIdentifierPropertyAttribute.cs