Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / 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;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- XmlC14NWriter.cs
- XmlIterators.cs
- KeySpline.cs
- SqlCacheDependencyDatabase.cs
- COSERVERINFO.cs
- OpCodes.cs
- XmlBaseWriter.cs
- CompressedStack.cs
- ErrorStyle.cs
- ProfileEventArgs.cs
- ContentControl.cs
- RC2CryptoServiceProvider.cs
- SqlSupersetValidator.cs
- PrintingPermission.cs
- DefaultSection.cs
- ErrorRuntimeConfig.cs
- XmlNotation.cs
- EpmSourceTree.cs
- XmlSchemaDocumentation.cs
- AdjustableArrowCap.cs
- StorageSetMapping.cs
- RoleManagerEventArgs.cs
- SettingsPropertyIsReadOnlyException.cs
- CustomAttributeBuilder.cs
- StylusLogic.cs
- ColorAnimationBase.cs
- HostUtils.cs
- ColumnWidthChangingEvent.cs
- _UriSyntax.cs
- ColorMatrix.cs
- ValueType.cs
- _Semaphore.cs
- RowSpanVector.cs
- VectorAnimationUsingKeyFrames.cs
- XmlChildEnumerator.cs
- Schema.cs
- SQLByte.cs
- Operators.cs
- PersistChildrenAttribute.cs
- VisualProxy.cs
- DateTimeOffset.cs
- SqlConnection.cs
- ConfigurationException.cs
- ImageCollectionEditor.cs
- DependencyProperty.cs
- ClaimTypes.cs
- AssociationTypeEmitter.cs
- SqlDependency.cs
- MediaPlayerState.cs
- UnconditionalPolicy.cs
- OutputCacheProviderCollection.cs
- HashCryptoHandle.cs
- PropertyIDSet.cs
- LocatorGroup.cs
- TempFiles.cs
- TextFindEngine.cs
- ScriptServiceAttribute.cs
- contentDescriptor.cs
- XmlSignificantWhitespace.cs
- MenuRenderer.cs
- SingleQueryOperator.cs
- HttpHeaderCollection.cs
- BidOverLoads.cs
- AnimationLayer.cs
- DeviceOverridableAttribute.cs
- datacache.cs
- SecurityTokenParametersEnumerable.cs
- UnsafeNativeMethods.cs
- DataGridViewCellCollection.cs
- PerformanceCounterTraceRecord.cs
- OracleCommandBuilder.cs
- ActiveXHelper.cs
- PagedControl.cs
- Content.cs
- LongValidatorAttribute.cs
- ResourceWriter.cs
- MD5CryptoServiceProvider.cs
- PathFigureCollectionValueSerializer.cs
- FullTextBreakpoint.cs
- XmlParserContext.cs
- EditorAttribute.cs
- EmissiveMaterial.cs
- CodeConstructor.cs
- iisPickupDirectory.cs
- CheckoutException.cs
- AnimationStorage.cs
- SizeLimitedCache.cs
- BaseUriHelper.cs
- HtmlToClrEventProxy.cs
- URLEditor.cs
- DetailsViewActionList.cs
- _emptywebproxy.cs
- NameTable.cs
- FilteredDataSetHelper.cs
- WhileDesigner.xaml.cs
- NotifyCollectionChangedEventArgs.cs
- DescendantBaseQuery.cs
- SystemResourceKey.cs
- WMICapabilities.cs
- SiteIdentityPermission.cs