Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / whidbey / NetFxQFE / 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
- PassportAuthenticationEventArgs.cs
- arc.cs
- FileIOPermission.cs
- MetadataArtifactLoaderResource.cs
- InvokeFunc.cs
- DateTimeConverter.cs
- SafeCoTaskMem.cs
- SchemaNamespaceManager.cs
- HtmlValidationSummaryAdapter.cs
- ReferenceConverter.cs
- StyleReferenceConverter.cs
- OleDbFactory.cs
- JobPageOrder.cs
- MD5CryptoServiceProvider.cs
- PreservationFileWriter.cs
- ProjectionPathBuilder.cs
- AllMembershipCondition.cs
- XamlStyleSerializer.cs
- PrivilegeNotHeldException.cs
- SoundPlayerAction.cs
- AuthenticationModuleElement.cs
- DebugViewWriter.cs
- SoapReflectionImporter.cs
- DictionaryItemsCollection.cs
- OLEDB_Util.cs
- DataGridViewColumnCollectionDialog.cs
- EntityDesignerDataSourceView.cs
- SplineKeyFrames.cs
- NotCondition.cs
- TextServicesCompartment.cs
- ClickablePoint.cs
- IdnMapping.cs
- BindingContext.cs
- Stream.cs
- XamlFigureLengthSerializer.cs
- NavigationEventArgs.cs
- SystemWebSectionGroup.cs
- DynamicILGenerator.cs
- TdsRecordBufferSetter.cs
- EmbeddedMailObject.cs
- BitmapImage.cs
- TextSegment.cs
- StrokeCollection2.cs
- CacheEntry.cs
- xmlfixedPageInfo.cs
- SqlNamer.cs
- BufferedGraphicsContext.cs
- UserControl.cs
- BooleanFunctions.cs
- TextEndOfParagraph.cs
- CustomError.cs
- DataGridViewMethods.cs
- LoginUtil.cs
- ListViewItem.cs
- ExceptionWrapper.cs
- Scene3D.cs
- DBAsyncResult.cs
- HandleScope.cs
- DataServiceResponse.cs
- DateTimePickerDesigner.cs
- StickyNoteHelper.cs
- BitmapEffectCollection.cs
- DataGridViewAutoSizeModeEventArgs.cs
- WorkflowOperationAsyncResult.cs
- remotingproxy.cs
- TreeView.cs
- StylusPointPropertyInfoDefaults.cs
- Enum.cs
- FocusWithinProperty.cs
- CodeTypeOfExpression.cs
- RegexStringValidatorAttribute.cs
- SqlVersion.cs
- xmlformatgeneratorstatics.cs
- NameTable.cs
- ModifierKeysConverter.cs
- InvokeMethodActivity.cs
- Parsers.cs
- MouseGestureConverter.cs
- TextTreeFixupNode.cs
- COM2IManagedPerPropertyBrowsingHandler.cs
- DrawingServices.cs
- TabPage.cs
- MimeTextImporter.cs
- RectAnimationUsingKeyFrames.cs
- EntityUtil.cs
- MergeFailedEvent.cs
- HtmlInputReset.cs
- TableLayoutPanel.cs
- CodeComment.cs
- ParallelQuery.cs
- BufferBuilder.cs
- DefaultParameterValueAttribute.cs
- OleDbError.cs
- EmptyEnumerable.cs
- ManipulationLogic.cs
- TextEditorSelection.cs
- LinkLabel.cs
- WaitHandleCannotBeOpenedException.cs
- WebServiceHandler.cs
- IBuiltInEvidence.cs