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
- cookiecontainer.cs
- PeerUnsafeNativeCryptMethods.cs
- MsmqIntegrationSecurity.cs
- ColorConvertedBitmap.cs
- XmlObjectSerializerWriteContextComplexJson.cs
- XmlHierarchicalEnumerable.cs
- CodeTypeDelegate.cs
- StatusStrip.cs
- HwndTarget.cs
- NullableDecimalAverageAggregationOperator.cs
- SQLResource.cs
- MenuEventArgs.cs
- SecurityIdentifierConverter.cs
- ClientBuildManager.cs
- CapiHashAlgorithm.cs
- PackWebResponse.cs
- ConnectionManagementElement.cs
- XamlDesignerSerializationManager.cs
- RSAPKCS1SignatureDeformatter.cs
- Font.cs
- SiteMapNode.cs
- Attributes.cs
- RecognizedWordUnit.cs
- WebServiceTypeData.cs
- XPathParser.cs
- HwndHostAutomationPeer.cs
- RelatedPropertyManager.cs
- FaultReason.cs
- CompilerResults.cs
- TypeConverterAttribute.cs
- ImpersonationContext.cs
- XPathChildIterator.cs
- RecognitionResult.cs
- OracleEncoding.cs
- QueryResponse.cs
- DataGridViewSelectedColumnCollection.cs
- Mappings.cs
- UrlAuthFailedErrorFormatter.cs
- SafeLibraryHandle.cs
- WebPart.cs
- COM2EnumConverter.cs
- SqlFunctions.cs
- RewritingPass.cs
- X509Utils.cs
- CreatingCookieEventArgs.cs
- QilXmlReader.cs
- EncodingTable.cs
- PropertyGridCommands.cs
- CompilerHelpers.cs
- TypedElement.cs
- CodeNamespaceImportCollection.cs
- DesignerProperties.cs
- SymbolEqualComparer.cs
- DBDataPermissionAttribute.cs
- WindowsProgressbar.cs
- ContentPresenter.cs
- AttributeEmitter.cs
- Filter.cs
- WebPartManagerInternals.cs
- FixedSOMPageElement.cs
- Object.cs
- StateDesignerConnector.cs
- LZCodec.cs
- FlowchartDesigner.Helpers.cs
- WindowsSysHeader.cs
- CodeDirectoryCompiler.cs
- EmbeddedMailObjectsCollection.cs
- LinkedResourceCollection.cs
- SingleKeyFrameCollection.cs
- DLinqAssociationProvider.cs
- WinCategoryAttribute.cs
- RuntimeArgumentHandle.cs
- ListViewHitTestInfo.cs
- TypeLoadException.cs
- ReflectionUtil.cs
- SqlParameterCollection.cs
- WbemException.cs
- SmiContext.cs
- TransformerConfigurationWizardBase.cs
- DragEvent.cs
- XmlTextReaderImplHelpers.cs
- DataControlButton.cs
- SmtpAuthenticationManager.cs
- SqlDataSourceStatusEventArgs.cs
- FillRuleValidation.cs
- SystemTcpStatistics.cs
- XXXOnTypeBuilderInstantiation.cs
- EventArgs.cs
- ResourceCategoryAttribute.cs
- TemplateInstanceAttribute.cs
- WsdlBuildProvider.cs
- ComNativeDescriptor.cs
- ConstructorArgumentAttribute.cs
- ComponentResourceManager.cs
- MutexSecurity.cs
- TraceHandler.cs
- WindowsAltTab.cs
- ViewLoader.cs
- MapPathBasedVirtualPathProvider.cs
- MenuItemCollection.cs