Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- UriSection.cs
- LinqDataSourceValidationException.cs
- PageSettings.cs
- TypeUtil.cs
- SmiMetaData.cs
- ProfilePropertyNameValidator.cs
- ValidatingPropertiesEventArgs.cs
- TabPanel.cs
- SmtpClient.cs
- TableLayoutColumnStyleCollection.cs
- WorkflowMarkupElementEventArgs.cs
- Helper.cs
- AddingNewEventArgs.cs
- LogicalExpr.cs
- CounterSampleCalculator.cs
- SpellCheck.cs
- RawStylusSystemGestureInputReport.cs
- ClientSession.cs
- SymmetricAlgorithm.cs
- GenericArgumentsUpdater.cs
- ArgIterator.cs
- SystemNetworkInterface.cs
- GZipUtils.cs
- DelimitedListTraceListener.cs
- ClickablePoint.cs
- InternalBufferManager.cs
- ColorTransform.cs
- OrthographicCamera.cs
- CategoryValueConverter.cs
- EntityDataSourceWrapper.cs
- Separator.cs
- CharEnumerator.cs
- SqlDataSourceCache.cs
- XPathNavigatorReader.cs
- DbProviderManifest.cs
- SystemInfo.cs
- SqlProvider.cs
- PeerResolverBindingElement.cs
- BroadcastEventHelper.cs
- TcpClientCredentialType.cs
- DataGridLinkButton.cs
- MethodInfo.cs
- ColumnCollectionEditor.cs
- Figure.cs
- UnknownMessageReceivedEventArgs.cs
- SortExpressionBuilder.cs
- DbConnectionHelper.cs
- HwndMouseInputProvider.cs
- _OSSOCK.cs
- WebReferenceCollection.cs
- Collection.cs
- HMAC.cs
- TransactionCache.cs
- BinaryUtilClasses.cs
- CodeCatchClause.cs
- ProxyWebPartManager.cs
- IInstanceContextProvider.cs
- XPathSelectionIterator.cs
- VisualState.cs
- WhitespaceRuleLookup.cs
- PropertyReference.cs
- EventManager.cs
- DES.cs
- InProcStateClientManager.cs
- Application.cs
- OperationCanceledException.cs
- FixedSOMPageElement.cs
- Memoizer.cs
- SoapTypeAttribute.cs
- PersonalizationProviderHelper.cs
- CaseInsensitiveHashCodeProvider.cs
- listitem.cs
- HMACSHA512.cs
- UdpTransportSettings.cs
- DataGridHeaderBorder.cs
- RoleGroupCollection.cs
- SettingsContext.cs
- AlphabetConverter.cs
- MachineSettingsSection.cs
- RadioButton.cs
- KeyToListMap.cs
- CryptoHelper.cs
- ResourceCategoryAttribute.cs
- TableLayoutSettingsTypeConverter.cs
- ConditionCollection.cs
- RelativeSource.cs
- GacUtil.cs
- BitmapCache.cs
- TcpAppDomainProtocolHandler.cs
- MostlySingletonList.cs
- PropertyEntry.cs
- DataGridViewCellFormattingEventArgs.cs
- RelationshipFixer.cs
- Missing.cs
- TableRow.cs
- GridToolTip.cs
- SessionPageStateSection.cs
- SerialStream.cs
- DataGridRowHeader.cs
- EntityDataSourceWrapperCollection.cs