Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Services / Web / System / Web / Services / Protocols / Scalars.cs / 1305376 / Scalars.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Services.Protocols { using System.Web.Services; using System.Collections; using System.Globalization; using System.Reflection; using System; using System.Text; using System.Threading; internal class ScalarFormatter { private ScalarFormatter() {} internal static string ToString(object value) { if (value == null) return string.Empty; else if (value is string) return (string)value; else if (value.GetType().IsEnum) return EnumToString(value); else return (string)Convert.ToString(value, CultureInfo.InvariantCulture); } internal static object FromString(string value, Type type) { try { if (type == typeof(string)) return value; else if (type.IsEnum) return (object)EnumFromString(value, type); else return Convert.ChangeType(value, type, CultureInfo.InvariantCulture); } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } throw new ArgumentException(Res.GetString(Res.WebChangeTypeFailed, value, type.FullName), "type", e); } } static object EnumFromString(string value, Type type) { return Enum.Parse(type, value); } static string EnumToString(object value) { return Enum.Format(value.GetType(), value, "G"); } // We support: whatever Convert supports, and Enums internal static bool IsTypeSupported(Type type) { if (type.IsEnum) return true; return ( type == typeof(int) || type == typeof(string) || type == typeof(long) || type == typeof(byte) || type == typeof(sbyte) || type == typeof(short) || type == typeof(bool) || type == typeof(char) || type == typeof(float) || type == typeof(decimal) || type == typeof(DateTime) || type == typeof(UInt16) || type == typeof(UInt32) || type == typeof(UInt64) || type == typeof(double)); } } internal class UrlEncoder { private UrlEncoder() {} private const int Max16BitUtf8SequenceLength = 4; internal static string EscapeString(string s, Encoding e) { return EscapeStringInternal(s, e == null ? new ASCIIEncoding() : e, false); } internal static string UrlEscapeString(string s, Encoding e) { return EscapeStringInternal(s, e == null ? new ASCIIEncoding() : e, true); } private static string EscapeStringInternal(string s, Encoding e, bool escapeUriStuff) { if (s == null) return null; byte[] bytes = e.GetBytes(s); StringBuilder sb = new StringBuilder(bytes.Length); for (int i = 0; i < bytes.Length; i++) { byte b = bytes[i]; char c = (char)b; if (b > 0x7f || b < 0x20 || c == '%' || (escapeUriStuff && !IsSafe(c))) { HexEscape8(sb, c); } else { sb.Append(c); } } return sb.ToString(); } /* // [....]: adapted from UrlEscapeStringUnicode below internal static string EscapeStringUnicode(string s) { int l = s.Length; StringBuilder sb = new StringBuilder(l); for (int i = 0; i < l; i++) { char ch = s[i]; if ((ch & 0xff80) == 0) { sb.Append(ch); } else { HexEscape16(sb, ch); } } return sb.ToString(); } */ // [....]: copied from System.Web.HttpUtility internal static string UrlEscapeStringUnicode(string s) { int l = s.Length; StringBuilder sb = new StringBuilder(l); for (int i = 0; i < l; i++) { char ch = s[i]; if (IsSafe(ch)) { sb.Append(ch); } else if (ch == ' ') { sb.Append('+'); } else if ((ch & 0xff80) == 0) { // 7 bit? HexEscape8(sb, ch); } else { // arbitrary Unicode? HexEscape16(sb, ch); } } return sb.ToString(); } private static void HexEscape8(StringBuilder sb, char c) { sb.Append('%'); sb.Append(HexUpperChars[(c >> 4) & 0xf]); sb.Append(HexUpperChars[(c ) & 0xf]); } private static void HexEscape16(StringBuilder sb, char c) { sb.Append("%u"); sb.Append(HexUpperChars[(c >> 12) & 0xf]); sb.Append(HexUpperChars[(c >> 8) & 0xf]); sb.Append(HexUpperChars[(c >> 4) & 0xf]); sb.Append(HexUpperChars[(c ) & 0xf]); } private static bool IsSafe(char ch) { if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9') return true; switch (ch) { case '-': case '_': case '.': case '!': case '*': case '\'': case '(': case ')': return true; } return false; } internal static readonly char[] HexUpperChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; } internal class ContentType { private ContentType() {} internal const string TextBase = "text"; internal const string TextXml = "text/xml"; internal const string TextPlain = "text/plain"; internal const string TextHtml = "text/html"; internal const string ApplicationBase = "application"; internal const string ApplicationXml = "application/xml"; internal const string ApplicationSoap = "application/soap+xml"; internal const string ApplicationOctetStream = "application/octet-stream"; internal const string ContentEncoding = "Content-Encoding"; // this returns the "base" part of the contentType/mimeType, e.g. the "text/xml" part w/o // the ; CharSet=isoxxx part that sometimes follows. internal static string GetBase(string contentType) { int semi = contentType.IndexOf(';'); if (semi >= 0) return contentType.Substring(0, semi); return contentType; } // this returns the "type" part of the contentType/mimeType without subtyape internal static string GetMediaType(string contentType) { string baseCT = GetBase(contentType); int tmp = baseCT.IndexOf('/'); if (tmp >= 0) return baseCT.Substring(0, tmp); return baseCT; } // grabs as follows (and case-insensitive): .*;\s*charset\s*=\s*[\s'"]*(.*)[\s'"]* internal static string GetCharset(string contentType) { return GetParameter(contentType, "charset"); } internal static string GetAction(string contentType) { return GetParameter(contentType, "action"); } private static string GetParameter(string contentType, string paramName) { string[] paramDecls = contentType.Split(new char[] { ';' }); for (int i = 1; i < paramDecls.Length; i++) { string paramDecl = paramDecls[i].TrimStart(null); if (String.Compare(paramDecl, 0, paramName, 0, paramName.Length, StringComparison.OrdinalIgnoreCase) == 0) { int equals = paramDecl.IndexOf('=', paramName.Length); if (equals >= 0) return paramDecl.Substring(equals + 1).Trim(new char[] {' ', '\'', '\"', '\t'}); } } return null; } internal static bool MatchesBase(string contentType, string baseContentType) { return string.Compare(GetBase(contentType), baseContentType, StringComparison.OrdinalIgnoreCase) == 0; } internal static bool IsApplication(string contentType) { return string.Compare(GetMediaType(contentType), ApplicationBase, StringComparison.OrdinalIgnoreCase) == 0; } internal static bool IsSoap(string contentType) { string type = GetBase(contentType); return (String.Compare(type, ContentType.TextXml, StringComparison.OrdinalIgnoreCase) == 0) || (String.Compare(type, ContentType.ApplicationSoap, StringComparison.OrdinalIgnoreCase) == 0); } internal static bool IsXml(string contentType) { string type = GetBase(contentType); return (String.Compare(type, ContentType.TextXml, StringComparison.OrdinalIgnoreCase) == 0) || (String.Compare(type, ContentType.ApplicationXml, StringComparison.OrdinalIgnoreCase) == 0); } internal static bool IsHtml(string contentType) { string type = GetBase(contentType); return String.Compare(type, ContentType.TextHtml, StringComparison.OrdinalIgnoreCase) == 0; } internal static string Compose(string contentType, Encoding encoding) { return Compose(contentType, encoding, null); } internal static string Compose(string contentType, Encoding encoding, string action) { if (encoding == null && action == null) return contentType; StringBuilder sb = new StringBuilder(contentType); if (encoding != null) { sb.Append("; charset="); sb.Append(encoding.WebName); } if (action != null) { sb.Append("; action=\""); sb.Append(action); sb.Append("\""); } return sb.ToString(); } } internal class MemberHelper { private MemberHelper() {} static object[] emptyObjectArray = new object[0]; internal static void SetValue(MemberInfo memberInfo, object target, object value) { if (memberInfo is FieldInfo ) { ((FieldInfo)memberInfo).SetValue(target, value); } else { ((PropertyInfo)memberInfo).SetValue(target, value, emptyObjectArray); } } internal static object GetValue(MemberInfo memberInfo, object target) { if (memberInfo is FieldInfo) { return ((FieldInfo)memberInfo).GetValue(target); } else { return ((PropertyInfo)memberInfo).GetValue(target, emptyObjectArray); } } internal static bool IsStatic(MemberInfo memberInfo) { if (memberInfo is FieldInfo) return ((FieldInfo)memberInfo).IsStatic; else return false; } internal static bool CanRead(MemberInfo memberInfo) { if (memberInfo is FieldInfo) return true; else return ((PropertyInfo)memberInfo).CanRead; } internal static bool CanWrite(MemberInfo memberInfo) { if (memberInfo is FieldInfo) return true; else return ((PropertyInfo)memberInfo).CanWrite; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.Services.Protocols { using System.Web.Services; using System.Collections; using System.Globalization; using System.Reflection; using System; using System.Text; using System.Threading; internal class ScalarFormatter { private ScalarFormatter() {} internal static string ToString(object value) { if (value == null) return string.Empty; else if (value is string) return (string)value; else if (value.GetType().IsEnum) return EnumToString(value); else return (string)Convert.ToString(value, CultureInfo.InvariantCulture); } internal static object FromString(string value, Type type) { try { if (type == typeof(string)) return value; else if (type.IsEnum) return (object)EnumFromString(value, type); else return Convert.ChangeType(value, type, CultureInfo.InvariantCulture); } catch (Exception e) { if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } throw new ArgumentException(Res.GetString(Res.WebChangeTypeFailed, value, type.FullName), "type", e); } } static object EnumFromString(string value, Type type) { return Enum.Parse(type, value); } static string EnumToString(object value) { return Enum.Format(value.GetType(), value, "G"); } // We support: whatever Convert supports, and Enums internal static bool IsTypeSupported(Type type) { if (type.IsEnum) return true; return ( type == typeof(int) || type == typeof(string) || type == typeof(long) || type == typeof(byte) || type == typeof(sbyte) || type == typeof(short) || type == typeof(bool) || type == typeof(char) || type == typeof(float) || type == typeof(decimal) || type == typeof(DateTime) || type == typeof(UInt16) || type == typeof(UInt32) || type == typeof(UInt64) || type == typeof(double)); } } internal class UrlEncoder { private UrlEncoder() {} private const int Max16BitUtf8SequenceLength = 4; internal static string EscapeString(string s, Encoding e) { return EscapeStringInternal(s, e == null ? new ASCIIEncoding() : e, false); } internal static string UrlEscapeString(string s, Encoding e) { return EscapeStringInternal(s, e == null ? new ASCIIEncoding() : e, true); } private static string EscapeStringInternal(string s, Encoding e, bool escapeUriStuff) { if (s == null) return null; byte[] bytes = e.GetBytes(s); StringBuilder sb = new StringBuilder(bytes.Length); for (int i = 0; i < bytes.Length; i++) { byte b = bytes[i]; char c = (char)b; if (b > 0x7f || b < 0x20 || c == '%' || (escapeUriStuff && !IsSafe(c))) { HexEscape8(sb, c); } else { sb.Append(c); } } return sb.ToString(); } /* // [....]: adapted from UrlEscapeStringUnicode below internal static string EscapeStringUnicode(string s) { int l = s.Length; StringBuilder sb = new StringBuilder(l); for (int i = 0; i < l; i++) { char ch = s[i]; if ((ch & 0xff80) == 0) { sb.Append(ch); } else { HexEscape16(sb, ch); } } return sb.ToString(); } */ // [....]: copied from System.Web.HttpUtility internal static string UrlEscapeStringUnicode(string s) { int l = s.Length; StringBuilder sb = new StringBuilder(l); for (int i = 0; i < l; i++) { char ch = s[i]; if (IsSafe(ch)) { sb.Append(ch); } else if (ch == ' ') { sb.Append('+'); } else if ((ch & 0xff80) == 0) { // 7 bit? HexEscape8(sb, ch); } else { // arbitrary Unicode? HexEscape16(sb, ch); } } return sb.ToString(); } private static void HexEscape8(StringBuilder sb, char c) { sb.Append('%'); sb.Append(HexUpperChars[(c >> 4) & 0xf]); sb.Append(HexUpperChars[(c ) & 0xf]); } private static void HexEscape16(StringBuilder sb, char c) { sb.Append("%u"); sb.Append(HexUpperChars[(c >> 12) & 0xf]); sb.Append(HexUpperChars[(c >> 8) & 0xf]); sb.Append(HexUpperChars[(c >> 4) & 0xf]); sb.Append(HexUpperChars[(c ) & 0xf]); } private static bool IsSafe(char ch) { if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' || ch >= '0' && ch <= '9') return true; switch (ch) { case '-': case '_': case '.': case '!': case '*': case '\'': case '(': case ')': return true; } return false; } internal static readonly char[] HexUpperChars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; } internal class ContentType { private ContentType() {} internal const string TextBase = "text"; internal const string TextXml = "text/xml"; internal const string TextPlain = "text/plain"; internal const string TextHtml = "text/html"; internal const string ApplicationBase = "application"; internal const string ApplicationXml = "application/xml"; internal const string ApplicationSoap = "application/soap+xml"; internal const string ApplicationOctetStream = "application/octet-stream"; internal const string ContentEncoding = "Content-Encoding"; // this returns the "base" part of the contentType/mimeType, e.g. the "text/xml" part w/o // the ; CharSet=isoxxx part that sometimes follows. internal static string GetBase(string contentType) { int semi = contentType.IndexOf(';'); if (semi >= 0) return contentType.Substring(0, semi); return contentType; } // this returns the "type" part of the contentType/mimeType without subtyape internal static string GetMediaType(string contentType) { string baseCT = GetBase(contentType); int tmp = baseCT.IndexOf('/'); if (tmp >= 0) return baseCT.Substring(0, tmp); return baseCT; } // grabs as follows (and case-insensitive): .*;\s*charset\s*=\s*[\s'"]*(.*)[\s'"]* internal static string GetCharset(string contentType) { return GetParameter(contentType, "charset"); } internal static string GetAction(string contentType) { return GetParameter(contentType, "action"); } private static string GetParameter(string contentType, string paramName) { string[] paramDecls = contentType.Split(new char[] { ';' }); for (int i = 1; i < paramDecls.Length; i++) { string paramDecl = paramDecls[i].TrimStart(null); if (String.Compare(paramDecl, 0, paramName, 0, paramName.Length, StringComparison.OrdinalIgnoreCase) == 0) { int equals = paramDecl.IndexOf('=', paramName.Length); if (equals >= 0) return paramDecl.Substring(equals + 1).Trim(new char[] {' ', '\'', '\"', '\t'}); } } return null; } internal static bool MatchesBase(string contentType, string baseContentType) { return string.Compare(GetBase(contentType), baseContentType, StringComparison.OrdinalIgnoreCase) == 0; } internal static bool IsApplication(string contentType) { return string.Compare(GetMediaType(contentType), ApplicationBase, StringComparison.OrdinalIgnoreCase) == 0; } internal static bool IsSoap(string contentType) { string type = GetBase(contentType); return (String.Compare(type, ContentType.TextXml, StringComparison.OrdinalIgnoreCase) == 0) || (String.Compare(type, ContentType.ApplicationSoap, StringComparison.OrdinalIgnoreCase) == 0); } internal static bool IsXml(string contentType) { string type = GetBase(contentType); return (String.Compare(type, ContentType.TextXml, StringComparison.OrdinalIgnoreCase) == 0) || (String.Compare(type, ContentType.ApplicationXml, StringComparison.OrdinalIgnoreCase) == 0); } internal static bool IsHtml(string contentType) { string type = GetBase(contentType); return String.Compare(type, ContentType.TextHtml, StringComparison.OrdinalIgnoreCase) == 0; } internal static string Compose(string contentType, Encoding encoding) { return Compose(contentType, encoding, null); } internal static string Compose(string contentType, Encoding encoding, string action) { if (encoding == null && action == null) return contentType; StringBuilder sb = new StringBuilder(contentType); if (encoding != null) { sb.Append("; charset="); sb.Append(encoding.WebName); } if (action != null) { sb.Append("; action=\""); sb.Append(action); sb.Append("\""); } return sb.ToString(); } } internal class MemberHelper { private MemberHelper() {} static object[] emptyObjectArray = new object[0]; internal static void SetValue(MemberInfo memberInfo, object target, object value) { if (memberInfo is FieldInfo ) { ((FieldInfo)memberInfo).SetValue(target, value); } else { ((PropertyInfo)memberInfo).SetValue(target, value, emptyObjectArray); } } internal static object GetValue(MemberInfo memberInfo, object target) { if (memberInfo is FieldInfo) { return ((FieldInfo)memberInfo).GetValue(target); } else { return ((PropertyInfo)memberInfo).GetValue(target, emptyObjectArray); } } internal static bool IsStatic(MemberInfo memberInfo) { if (memberInfo is FieldInfo) return ((FieldInfo)memberInfo).IsStatic; else return false; } internal static bool CanRead(MemberInfo memberInfo) { if (memberInfo is FieldInfo) return true; else return ((PropertyInfo)memberInfo).CanRead; } internal static bool CanWrite(MemberInfo memberInfo) { if (memberInfo is FieldInfo) return true; else return ((PropertyInfo)memberInfo).CanWrite; } } } // 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
- XmlTypeAttribute.cs
- TrackPointCollection.cs
- Variable.cs
- httpstaticobjectscollection.cs
- OracleBinary.cs
- HttpCachePolicy.cs
- ConstructorNeedsTagAttribute.cs
- ViewEvent.cs
- SchemaCollectionPreprocessor.cs
- TabletCollection.cs
- XmlSchemaAttribute.cs
- ContentOperations.cs
- MainMenu.cs
- MetadataUtil.cs
- ProcessInfo.cs
- HttpVersion.cs
- Util.cs
- TreeNode.cs
- SqlConnectionPoolGroupProviderInfo.cs
- GPRECT.cs
- userdatakeys.cs
- XmlCDATASection.cs
- SecurityAccessDeniedException.cs
- X509Chain.cs
- BitmapEffectDrawingContextWalker.cs
- TemplateControl.cs
- AssemblyNameProxy.cs
- InvalidWMPVersionException.cs
- Automation.cs
- BoundField.cs
- AuthorizationSection.cs
- BufferedGraphics.cs
- DataGrid.cs
- QilPatternVisitor.cs
- RayHitTestParameters.cs
- ConfigurationHandlersInstallComponent.cs
- SqlUtils.cs
- Schema.cs
- LinearQuaternionKeyFrame.cs
- XmlSerializerSection.cs
- StateWorkerRequest.cs
- TemplateParser.cs
- ExternalException.cs
- documentsequencetextview.cs
- Vector3DAnimationBase.cs
- MessageTransmitTraceRecord.cs
- PanelContainerDesigner.cs
- PolicyLevel.cs
- Errors.cs
- MailSettingsSection.cs
- ModelServiceImpl.cs
- X509CertificateRecipientServiceCredential.cs
- HijriCalendar.cs
- RenderData.cs
- DataServiceHost.cs
- BamlResourceDeserializer.cs
- MsmqMessage.cs
- WindowsNonControl.cs
- RepeaterCommandEventArgs.cs
- SoundPlayer.cs
- OleDbConnectionFactory.cs
- CellTreeNodeVisitors.cs
- DataViewListener.cs
- TaskFormBase.cs
- SelectionItemPattern.cs
- ConsoleEntryPoint.cs
- EventLogHandle.cs
- DataListItemCollection.cs
- NotifyIcon.cs
- DBBindings.cs
- GridViewRow.cs
- _CookieModule.cs
- Viewport3DAutomationPeer.cs
- WmlControlAdapter.cs
- ProtocolsConfigurationEntry.cs
- ColumnPropertiesGroup.cs
- _SslState.cs
- Clock.cs
- ApplicationServicesHostFactory.cs
- TypeUtils.cs
- ActivityInstanceReference.cs
- SpeechEvent.cs
- SingletonChannelAcceptor.cs
- QueryCacheEntry.cs
- ConstructorBuilder.cs
- DataSourceBooleanViewSchemaConverter.cs
- TypedTableBaseExtensions.cs
- SqlNodeAnnotation.cs
- ModelProperty.cs
- DataGridCaption.cs
- RemoteTokenFactory.cs
- CodeAttributeArgumentCollection.cs
- dataobject.cs
- TargetParameterCountException.cs
- ReadOnlyDataSource.cs
- EventProviderBase.cs
- EntityDataSource.cs
- FileNotFoundException.cs
- ViewManagerAttribute.cs
- XmlResolver.cs