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
- PlatformNotSupportedException.cs
- StyleHelper.cs
- RenderingBiasValidation.cs
- SystemColors.cs
- Configuration.cs
- DoubleAnimationUsingPath.cs
- EventSetterHandlerConverter.cs
- RadioButtonBaseAdapter.cs
- PreviousTrackingServiceAttribute.cs
- ColorInterpolationModeValidation.cs
- GradientSpreadMethodValidation.cs
- AxParameterData.cs
- ColumnBinding.cs
- UrlAuthFailedErrorFormatter.cs
- ByteViewer.cs
- TriggerActionCollection.cs
- Filter.cs
- Propagator.Evaluator.cs
- ResourceBinder.cs
- Expr.cs
- CodeDomDecompiler.cs
- RankException.cs
- COAUTHIDENTITY.cs
- DateTimeConstantAttribute.cs
- DocumentCollection.cs
- UrlMappingsModule.cs
- XmlEntityReference.cs
- ContentElementAutomationPeer.cs
- OutputScopeManager.cs
- ContentPropertyAttribute.cs
- EntityStoreSchemaGenerator.cs
- File.cs
- HTMLTextWriter.cs
- TreeViewAutomationPeer.cs
- GeneratedContractType.cs
- ConfigurationManagerInternalFactory.cs
- Matrix3D.cs
- DataGridPagerStyle.cs
- MultipleViewProviderWrapper.cs
- OleDbTransaction.cs
- IntSecurity.cs
- RemoteWebConfigurationHost.cs
- XmlReturnWriter.cs
- SafeNativeMethods.cs
- DigitShape.cs
- SuppressIldasmAttribute.cs
- DataControlFieldCollection.cs
- CombinedTcpChannel.cs
- WebGetAttribute.cs
- Label.cs
- UnsafeNativeMethods.cs
- TemplateField.cs
- TriggerBase.cs
- DataTrigger.cs
- DataGridViewRowPrePaintEventArgs.cs
- XPathAncestorIterator.cs
- MetadataItemEmitter.cs
- ImageField.cs
- EntityFunctions.cs
- ImageAutomationPeer.cs
- View.cs
- RequestSecurityTokenResponseCollection.cs
- Win32.cs
- SqlCachedBuffer.cs
- SqlCacheDependencySection.cs
- ContextDataSourceContextData.cs
- DataRelationCollection.cs
- ScaleTransform3D.cs
- DataGridViewRowCancelEventArgs.cs
- UriSection.cs
- MethodExpression.cs
- PermissionAttributes.cs
- XmlArrayAttribute.cs
- MethodExpression.cs
- entitydatasourceentitysetnameconverter.cs
- TrackingParameters.cs
- Configuration.cs
- FieldAccessException.cs
- DataTableClearEvent.cs
- ReadOnlyDataSource.cs
- TableAdapterManagerMethodGenerator.cs
- DrawingVisualDrawingContext.cs
- MatchingStyle.cs
- IItemContainerGenerator.cs
- TimeSpan.cs
- LambdaCompiler.Logical.cs
- EventListener.cs
- LineInfo.cs
- RegexCode.cs
- FtpWebRequest.cs
- KeyNotFoundException.cs
- ManagedIStream.cs
- _OverlappedAsyncResult.cs
- RangeBase.cs
- CompletionCallbackWrapper.cs
- OutputCacheSettings.cs
- Thread.cs
- AlternateView.cs
- RedirectionProxy.cs
- ExpressionConverter.cs