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
- IdentityReference.cs
- HtmlTextBoxAdapter.cs
- FormsAuthenticationModule.cs
- WebProxyScriptElement.cs
- ImageMap.cs
- DelayedRegex.cs
- ErrorEventArgs.cs
- MaterializeFromAtom.cs
- AspNetCompatibilityRequirementsAttribute.cs
- SqlBooleanMismatchVisitor.cs
- CodeCommentStatement.cs
- DataTable.cs
- LifetimeServices.cs
- QilPatternVisitor.cs
- SequentialUshortCollection.cs
- RectValueSerializer.cs
- DbModificationCommandTree.cs
- TextSchema.cs
- TabControl.cs
- SelectionEditingBehavior.cs
- SignatureResourceHelper.cs
- CodeMemberEvent.cs
- DbConnectionOptions.cs
- WebPartTransformerCollection.cs
- GenericsNotImplementedException.cs
- ExpressionBuilderCollection.cs
- EntityClassGenerator.cs
- ControlEvent.cs
- KeyInstance.cs
- ModelUtilities.cs
- TempFiles.cs
- WebPartHelpVerb.cs
- InputReport.cs
- InputScopeConverter.cs
- TransformerInfoCollection.cs
- SecuritySessionClientSettings.cs
- LoadGrammarCompletedEventArgs.cs
- ProtectedConfigurationSection.cs
- BrowserCapabilitiesFactoryBase.cs
- ThreadAbortException.cs
- TableRow.cs
- StyleModeStack.cs
- MailAddress.cs
- Canvas.cs
- CodeNamespaceCollection.cs
- RegisterInfo.cs
- DecoderReplacementFallback.cs
- ListViewContainer.cs
- SymbolMethod.cs
- HandledMouseEvent.cs
- __Filters.cs
- PrintPreviewDialog.cs
- IxmlLineInfo.cs
- XAMLParseException.cs
- RegionData.cs
- RSAOAEPKeyExchangeDeformatter.cs
- KeyInstance.cs
- XmlUtilWriter.cs
- DragEvent.cs
- XmlDataCollection.cs
- StateDesigner.CommentLayoutGlyph.cs
- DesignerLabelAdapter.cs
- EngineSiteSapi.cs
- ToolStrip.cs
- ExecutionEngineException.cs
- RIPEMD160Managed.cs
- SynchronizingStream.cs
- OdbcParameterCollection.cs
- SliderAutomationPeer.cs
- DecimalKeyFrameCollection.cs
- DataSpaceManager.cs
- ConnectionOrientedTransportChannelListener.cs
- CssClassPropertyAttribute.cs
- DrawTreeNodeEventArgs.cs
- UniqueIdentifierService.cs
- HtmlShimManager.cs
- PresentationTraceSources.cs
- WeakHashtable.cs
- XmlSchemaSet.cs
- FileRecordSequence.cs
- AsymmetricKeyExchangeDeformatter.cs
- XslVisitor.cs
- CancellationTokenSource.cs
- MenuItemBinding.cs
- BaseAsyncResult.cs
- ListViewGroupConverter.cs
- HttpContextBase.cs
- ConfigurationValidatorAttribute.cs
- EntityPropertyMappingAttribute.cs
- Selector.cs
- AtomServiceDocumentSerializer.cs
- RoleExceptions.cs
- QuaternionIndependentAnimationStorage.cs
- CaseExpr.cs
- TaskFileService.cs
- DataListCommandEventArgs.cs
- IdentityNotMappedException.cs
- DataSourceSelectArguments.cs
- EntityModelSchemaGenerator.cs
- ByteRangeDownloader.cs