Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / 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.
//
//-----------------------------------------------------------------------------
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FreezableDefaultValueFactory.cs
- CustomValidator.cs
- ConfigXmlText.cs
- AuthenticationSchemesHelper.cs
- XmlSerializer.cs
- DisableDpiAwarenessAttribute.cs
- WCFServiceClientProxyGenerator.cs
- CollectionContainer.cs
- BStrWrapper.cs
- ProgressBarRenderer.cs
- BitArray.cs
- GlyphingCache.cs
- AddInToken.cs
- ApplicationProxyInternal.cs
- COM2Enum.cs
- DateTimePicker.cs
- HttpRuntimeSection.cs
- _UncName.cs
- Route.cs
- MarkupCompiler.cs
- RoutedEventHandlerInfo.cs
- remotingproxy.cs
- DataGridCommandEventArgs.cs
- TextRange.cs
- RadioButtonList.cs
- PointLight.cs
- tooltip.cs
- StringResourceManager.cs
- DataGridViewTopLeftHeaderCell.cs
- StartUpEventArgs.cs
- CompilerScope.Storage.cs
- IdnElement.cs
- FrameworkPropertyMetadata.cs
- CryptoHelper.cs
- SystemSounds.cs
- HtmlPageAdapter.cs
- RegistryConfigurationProvider.cs
- ProviderUtil.cs
- Quaternion.cs
- StatusCommandUI.cs
- FaultDescriptionCollection.cs
- If.cs
- DataFormats.cs
- EllipseGeometry.cs
- SamlAdvice.cs
- ProtocolsConfigurationEntry.cs
- errorpatternmatcher.cs
- WebServiceErrorEvent.cs
- TokenFactoryFactory.cs
- HtmlTableRowCollection.cs
- configsystem.cs
- TemplatedWizardStep.cs
- ValidatedControlConverter.cs
- CmsInterop.cs
- RTLAwareMessageBox.cs
- SecurityToken.cs
- MDIClient.cs
- EntityModelBuildProvider.cs
- ExceptionAggregator.cs
- MasterPageBuildProvider.cs
- ContextInformation.cs
- PropertyItemInternal.cs
- ClipboardProcessor.cs
- EmptyEnumerator.cs
- FontDriver.cs
- AvtEvent.cs
- UIElementIsland.cs
- SynchronizationLockException.cs
- TypeBuilderInstantiation.cs
- Dump.cs
- ToolboxBitmapAttribute.cs
- BooleanFacetDescriptionElement.cs
- FragmentNavigationEventArgs.cs
- Model3DGroup.cs
- OperatorExpressions.cs
- ListViewGroup.cs
- ScriptingWebServicesSectionGroup.cs
- OutputCacheProfile.cs
- TextBlock.cs
- ListViewGroupCollectionEditor.cs
- Path.cs
- GridViewRowPresenterBase.cs
- ValidateNames.cs
- DateTimeFormatInfoScanner.cs
- PolicyException.cs
- XPathDocumentIterator.cs
- _ListenerAsyncResult.cs
- FrameworkContentElement.cs
- TimeoutConverter.cs
- EventDescriptor.cs
- CompressStream.cs
- TrackingMemoryStream.cs
- ExpressionBuilderContext.cs
- InterleavedZipPartStream.cs
- DbProviderSpecificTypePropertyAttribute.cs
- SystemDiagnosticsSection.cs
- MostlySingletonList.cs
- AppSecurityManager.cs
- OdbcEnvironment.cs
- EventEntry.cs