Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / xsp / System / Web / UI / PropertyConverter.cs / 1 / PropertyConverter.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI { using System; using System.ComponentModel; using System.Globalization; using System.Reflection; using System.Runtime.Serialization.Formatters; using System.Security.Permissions; ////// /// [AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)] public static class PropertyConverter { private static readonly Type[] s_parseMethodTypes = new Type[] { typeof(string) }; private static readonly Type[] s_parseMethodTypesWithSOP = new Type[] { typeof(string), typeof(IServiceProvider) }; /* * Contains helpers to convert properties from strings to their types and vice versa. */ /* * Converts a persisted enumeration value into its numeric value. * Hyphen characters in the persisted format are converted to underscores. */ ////// public static object EnumFromString(Type enumType, string value) { try { return Enum.Parse(enumType, value, true); } catch { return null; } } /* * Converts a numeric enumerated value into its persisted form, which is the * code name with underscores replaced by hyphens. */ ////// public static string EnumToString(Type enumType, object enumValue) { string value = Enum.Format(enumType, enumValue, "G"); // return value.Replace('_','-'); } /* * Converts the persisted string into an object using the object's * FromString method. */ ////// public static object ObjectFromString(Type objType, MemberInfo propertyInfo, string value) { if (value == null) return null; // Blank valued bools don't map with FromString. Return null to allow // caller to interpret. if (objType.Equals(typeof(bool)) && value.Length == 0) { return null; } bool useParseMethod = true; object ret = null; try { if (objType.IsEnum) { useParseMethod = false; ret = EnumFromString(objType, value); } else if (objType.Equals(typeof(string))) { useParseMethod = false; ret = value; } else { PropertyDescriptor pd = null; if (propertyInfo != null) { pd = TypeDescriptor.GetProperties(propertyInfo.ReflectedType)[propertyInfo.Name]; } if (pd != null) { TypeConverter converter = pd.Converter; if (converter != null && converter.CanConvertFrom(typeof(string))) { useParseMethod = false; ret = converter.ConvertFromInvariantString(value); } } } } catch { } if (useParseMethod) { // resort to Parse static method on the type // First try Parse(string, IServiceProvider); MethodInfo methodInfo = objType.GetMethod("Parse", s_parseMethodTypesWithSOP); if (methodInfo != null) { object[] parameters = new object[2]; parameters[0] = value; parameters[1] = CultureInfo.InvariantCulture; try { ret = Util.InvokeMethod(methodInfo, null, parameters); } catch { } } else { // Try the simpler: Parse(string); methodInfo = objType.GetMethod("Parse", s_parseMethodTypes); if (methodInfo != null) { object[] parameters = new object[1]; parameters[0] = value; try { ret = Util.InvokeMethod(methodInfo, null, parameters); } catch { } } } } if (ret == null) { // Unhandled... throw an exception, so user sees an error at parse time // Note that we don't propagate inner exceptions here, since they usually // do not give any information about where the bad value existed on // the object being initialized, whereas, our exception gives that // information. throw new HttpException(SR.GetString(SR.Type_not_creatable_from_string, objType.FullName, value, propertyInfo.Name)); } return ret; } } }
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ScriptingProfileServiceSection.cs
- ThumbAutomationPeer.cs
- HtmlDocument.cs
- HttpRequest.cs
- SafeEventLogReadHandle.cs
- FormViewModeEventArgs.cs
- TabPanel.cs
- KerberosRequestorSecurityToken.cs
- ListSortDescriptionCollection.cs
- Polygon.cs
- SmiEventStream.cs
- ToolBar.cs
- StrongName.cs
- ChildTable.cs
- MarkupWriter.cs
- Viewport3DAutomationPeer.cs
- TableCellCollection.cs
- ExpandCollapseIsCheckedConverter.cs
- SQLDateTimeStorage.cs
- EdmEntityTypeAttribute.cs
- SessionIDManager.cs
- DBCommandBuilder.cs
- AsnEncodedData.cs
- HttpPostedFile.cs
- PropertyChangedEventArgs.cs
- FontNamesConverter.cs
- WebPartConnectionsConfigureVerb.cs
- BindingContext.cs
- TraceData.cs
- ListParagraph.cs
- SchemaReference.cs
- PeerDuplexChannelListener.cs
- ScriptResourceDefinition.cs
- SoapExtensionTypeElement.cs
- ApplicationCommands.cs
- LinqDataSourceView.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- SemanticAnalyzer.cs
- UnmanagedMemoryStream.cs
- HandledEventArgs.cs
- LayoutTable.cs
- OrderedDictionary.cs
- lengthconverter.cs
- RequestCache.cs
- MgmtResManager.cs
- Command.cs
- ToolStripPanel.cs
- RangeValidator.cs
- MenuItemStyleCollection.cs
- HtmlWindowCollection.cs
- DataReaderContainer.cs
- XmlSchemaComplexContent.cs
- Stream.cs
- BaseValidatorDesigner.cs
- ContentPathSegment.cs
- GridViewEditEventArgs.cs
- BinaryFormatter.cs
- AuthorizationRuleCollection.cs
- PointLightBase.cs
- HtmlInputRadioButton.cs
- ElementHostAutomationPeer.cs
- DataGridRow.cs
- DataGridViewBindingCompleteEventArgs.cs
- DataColumnPropertyDescriptor.cs
- WpfXamlLoader.cs
- Bitmap.cs
- GridItemCollection.cs
- WebPartTransformerAttribute.cs
- OpenTypeLayoutCache.cs
- WebPartZone.cs
- RegexMatch.cs
- GridViewCommandEventArgs.cs
- HandoffBehavior.cs
- LocalBuilder.cs
- RijndaelManagedTransform.cs
- Mappings.cs
- ConfigurationLockCollection.cs
- CreateRefExpr.cs
- XsltArgumentList.cs
- WeakEventTable.cs
- ListMarkerLine.cs
- HeaderUtility.cs
- Padding.cs
- RtfFormatStack.cs
- documentation.cs
- CompositeFontFamily.cs
- CustomValidator.cs
- ServiceDesigner.xaml.cs
- DecodeHelper.cs
- DynamicPhysicalDiscoSearcher.cs
- WsdlBuildProvider.cs
- ThicknessConverter.cs
- EtwTrackingBehavior.cs
- WebExceptionStatus.cs
- StorageTypeMapping.cs
- HttpResponse.cs
- WindowsBrush.cs
- ListControlStringCollectionEditor.cs
- PrimitiveType.cs
- AsymmetricKeyExchangeFormatter.cs