Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / clr / src / BCL / System / Reflection / MemberInfoSerializationHolder.cs / 1 / MemberInfoSerializationHolder.cs
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
using System;
using System.Runtime.Remoting;
using System.Runtime.Serialization;
using System.Globalization;
namespace System.Reflection
{
[Serializable]
internal class MemberInfoSerializationHolder : ISerializable, IObjectReference
{
#region Staitc Public Members
public static void GetSerializationInfo(SerializationInfo info, String name, Type reflectedClass, String signature, MemberTypes type)
{
GetSerializationInfo(info, name, reflectedClass, signature, type, null);
}
public static void GetSerializationInfo(
SerializationInfo info, String name, Type reflectedClass, String signature, MemberTypes type, Type[] genericArguments)
{
if (info == null)
throw new ArgumentNullException("info");
String assemblyName = reflectedClass.Module.Assembly.FullName;
String typeName = reflectedClass.FullName;
info.SetType(typeof(MemberInfoSerializationHolder));
info.AddValue("Name", name, typeof(String));
info.AddValue("AssemblyName", assemblyName, typeof(String));
info.AddValue("ClassName", typeName, typeof(String));
info.AddValue("Signature", signature, typeof(String));
info.AddValue("MemberType", (int)type);
info.AddValue("GenericArguments", genericArguments, typeof(Type[]));
}
#endregion
#region Private Data Members
private String m_memberName;
private RuntimeType m_reflectedType;
private String m_signature;
private MemberTypes m_memberType;
private SerializationInfo m_info;
#endregion
#region Constructor
internal MemberInfoSerializationHolder(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new ArgumentNullException("info");
String assemblyName = info.GetString("AssemblyName");
String typeName = info.GetString("ClassName");
if (assemblyName == null || typeName == null)
throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState"));
Assembly assem = FormatterServices.LoadAssemblyFromString(assemblyName);
m_reflectedType = assem.GetType(typeName, true, false) as RuntimeType;
m_memberName = info.GetString("Name");
m_signature = info.GetString("Signature");
m_memberType = (MemberTypes)info.GetInt32("MemberType");
m_info = info;
}
#endregion
#region ISerializable
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_Method));
}
#endregion
#region IObjectReference
public virtual Object GetRealObject(StreamingContext context)
{
if (m_memberName == null || m_reflectedType == null || m_memberType == 0)
throw new SerializationException(Environment.GetResourceString(ResId.Serialization_InsufficientState));
BindingFlags bindingFlags =
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Static | BindingFlags.OptionalParamBinding;
switch (m_memberType)
{
#region case MemberTypes.Field:
case MemberTypes.Field:
{
FieldInfo[] fields = m_reflectedType.GetMember(m_memberName, MemberTypes.Field, bindingFlags) as FieldInfo[];
if (fields.Length == 0)
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Serialization_UnknownMember"), m_memberName));
return fields[0];
}
#endregion
#region case MemberTypes.Event:
case MemberTypes.Event:
{
EventInfo[] events = m_reflectedType.GetMember(m_memberName, MemberTypes.Event, bindingFlags) as EventInfo[];
if (events.Length == 0)
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Serialization_UnknownMember"), m_memberName));
return events[0];
}
#endregion
#region case MemberTypes.Property:
case MemberTypes.Property:
{
PropertyInfo[] properties = m_reflectedType.GetMember(m_memberName, MemberTypes.Property, bindingFlags) as PropertyInfo[];
if (properties.Length == 0)
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Serialization_UnknownMember"), m_memberName));
if (properties.Length == 1)
return properties[0];
if (properties.Length > 1)
{
for (int i = 0; i < properties.Length; i++)
{
if ((properties[i]).ToString().Equals(m_signature))
return properties[i];
}
}
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString(ResId.Serialization_UnknownMember), m_memberName));
}
#endregion
#region case MemberTypes.Constructor:
case MemberTypes.Constructor:
{
if (m_signature == null)
throw new SerializationException(Environment.GetResourceString(ResId.Serialization_NullSignature));
ConstructorInfo[] constructors = m_reflectedType.GetMember(m_memberName, MemberTypes.Constructor, bindingFlags) as ConstructorInfo[];
if (constructors.Length == 1)
return constructors[0];
if (constructors.Length > 1)
{
for (int i = 0; i < constructors.Length; i++)
{
if (constructors[i].ToString().Equals(m_signature))
return constructors[i];
}
}
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString(ResId.Serialization_UnknownMember), m_memberName));
}
#endregion
#region case MemberTypes.Method:
case MemberTypes.Method:
{
MethodInfo methodInfo = null;
if (m_signature == null)
throw new SerializationException(Environment.GetResourceString(ResId.Serialization_NullSignature));
Type[] genericArguments = m_info.GetValueNoThrow("GenericArguments", typeof(Type[])) as Type[];
MethodInfo[] methods = m_reflectedType.GetMember(m_memberName, MemberTypes.Method, bindingFlags) as MethodInfo[];
if (methods.Length == 1)
methodInfo = methods[0];
else if (methods.Length > 1)
{
for (int i = 0; i < methods.Length; i++)
{
if (methods[i].ToString().Equals(m_signature))
{
methodInfo = methods[i];
break;
}
// Handle generic methods specially since the signature match above probably won't work (the candidate
// method info hasn't been instantiated). If our target method is generic as well we can skip this.
if (genericArguments != null && methods[i].IsGenericMethod)
{
if (methods[i].GetGenericArguments().Length == genericArguments.Length)
{
MethodInfo candidateMethod = methods[i].MakeGenericMethod(genericArguments);
if (candidateMethod.ToString().Equals(m_signature))
{
methodInfo = candidateMethod;
break;
}
}
}
}
}
if (methodInfo == null)
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString(ResId.Serialization_UnknownMember), m_memberName));
if (!methodInfo.IsGenericMethodDefinition)
return methodInfo;
if (genericArguments == null)
return methodInfo;
if (genericArguments[0] == null)
return null;
return methodInfo.MakeGenericMethod(genericArguments);
}
#endregion
default:
throw new ArgumentException(Environment.GetResourceString("Serialization_MemberTypeNotRecognized"));
}
}
#endregion
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// ==++==
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// ==--==
using System;
using System.Runtime.Remoting;
using System.Runtime.Serialization;
using System.Globalization;
namespace System.Reflection
{
[Serializable]
internal class MemberInfoSerializationHolder : ISerializable, IObjectReference
{
#region Staitc Public Members
public static void GetSerializationInfo(SerializationInfo info, String name, Type reflectedClass, String signature, MemberTypes type)
{
GetSerializationInfo(info, name, reflectedClass, signature, type, null);
}
public static void GetSerializationInfo(
SerializationInfo info, String name, Type reflectedClass, String signature, MemberTypes type, Type[] genericArguments)
{
if (info == null)
throw new ArgumentNullException("info");
String assemblyName = reflectedClass.Module.Assembly.FullName;
String typeName = reflectedClass.FullName;
info.SetType(typeof(MemberInfoSerializationHolder));
info.AddValue("Name", name, typeof(String));
info.AddValue("AssemblyName", assemblyName, typeof(String));
info.AddValue("ClassName", typeName, typeof(String));
info.AddValue("Signature", signature, typeof(String));
info.AddValue("MemberType", (int)type);
info.AddValue("GenericArguments", genericArguments, typeof(Type[]));
}
#endregion
#region Private Data Members
private String m_memberName;
private RuntimeType m_reflectedType;
private String m_signature;
private MemberTypes m_memberType;
private SerializationInfo m_info;
#endregion
#region Constructor
internal MemberInfoSerializationHolder(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new ArgumentNullException("info");
String assemblyName = info.GetString("AssemblyName");
String typeName = info.GetString("ClassName");
if (assemblyName == null || typeName == null)
throw new SerializationException(Environment.GetResourceString("Serialization_InsufficientState"));
Assembly assem = FormatterServices.LoadAssemblyFromString(assemblyName);
m_reflectedType = assem.GetType(typeName, true, false) as RuntimeType;
m_memberName = info.GetString("Name");
m_signature = info.GetString("Signature");
m_memberType = (MemberTypes)info.GetInt32("MemberType");
m_info = info;
}
#endregion
#region ISerializable
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
{
throw new NotSupportedException(Environment.GetResourceString(ResId.NotSupported_Method));
}
#endregion
#region IObjectReference
public virtual Object GetRealObject(StreamingContext context)
{
if (m_memberName == null || m_reflectedType == null || m_memberType == 0)
throw new SerializationException(Environment.GetResourceString(ResId.Serialization_InsufficientState));
BindingFlags bindingFlags =
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic |
BindingFlags.Static | BindingFlags.OptionalParamBinding;
switch (m_memberType)
{
#region case MemberTypes.Field:
case MemberTypes.Field:
{
FieldInfo[] fields = m_reflectedType.GetMember(m_memberName, MemberTypes.Field, bindingFlags) as FieldInfo[];
if (fields.Length == 0)
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Serialization_UnknownMember"), m_memberName));
return fields[0];
}
#endregion
#region case MemberTypes.Event:
case MemberTypes.Event:
{
EventInfo[] events = m_reflectedType.GetMember(m_memberName, MemberTypes.Event, bindingFlags) as EventInfo[];
if (events.Length == 0)
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Serialization_UnknownMember"), m_memberName));
return events[0];
}
#endregion
#region case MemberTypes.Property:
case MemberTypes.Property:
{
PropertyInfo[] properties = m_reflectedType.GetMember(m_memberName, MemberTypes.Property, bindingFlags) as PropertyInfo[];
if (properties.Length == 0)
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Serialization_UnknownMember"), m_memberName));
if (properties.Length == 1)
return properties[0];
if (properties.Length > 1)
{
for (int i = 0; i < properties.Length; i++)
{
if ((properties[i]).ToString().Equals(m_signature))
return properties[i];
}
}
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString(ResId.Serialization_UnknownMember), m_memberName));
}
#endregion
#region case MemberTypes.Constructor:
case MemberTypes.Constructor:
{
if (m_signature == null)
throw new SerializationException(Environment.GetResourceString(ResId.Serialization_NullSignature));
ConstructorInfo[] constructors = m_reflectedType.GetMember(m_memberName, MemberTypes.Constructor, bindingFlags) as ConstructorInfo[];
if (constructors.Length == 1)
return constructors[0];
if (constructors.Length > 1)
{
for (int i = 0; i < constructors.Length; i++)
{
if (constructors[i].ToString().Equals(m_signature))
return constructors[i];
}
}
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString(ResId.Serialization_UnknownMember), m_memberName));
}
#endregion
#region case MemberTypes.Method:
case MemberTypes.Method:
{
MethodInfo methodInfo = null;
if (m_signature == null)
throw new SerializationException(Environment.GetResourceString(ResId.Serialization_NullSignature));
Type[] genericArguments = m_info.GetValueNoThrow("GenericArguments", typeof(Type[])) as Type[];
MethodInfo[] methods = m_reflectedType.GetMember(m_memberName, MemberTypes.Method, bindingFlags) as MethodInfo[];
if (methods.Length == 1)
methodInfo = methods[0];
else if (methods.Length > 1)
{
for (int i = 0; i < methods.Length; i++)
{
if (methods[i].ToString().Equals(m_signature))
{
methodInfo = methods[i];
break;
}
// Handle generic methods specially since the signature match above probably won't work (the candidate
// method info hasn't been instantiated). If our target method is generic as well we can skip this.
if (genericArguments != null && methods[i].IsGenericMethod)
{
if (methods[i].GetGenericArguments().Length == genericArguments.Length)
{
MethodInfo candidateMethod = methods[i].MakeGenericMethod(genericArguments);
if (candidateMethod.ToString().Equals(m_signature))
{
methodInfo = candidateMethod;
break;
}
}
}
}
}
if (methodInfo == null)
throw new SerializationException(String.Format(CultureInfo.CurrentCulture, Environment.GetResourceString(ResId.Serialization_UnknownMember), m_memberName));
if (!methodInfo.IsGenericMethodDefinition)
return methodInfo;
if (genericArguments == null)
return methodInfo;
if (genericArguments[0] == null)
return null;
return methodInfo.MakeGenericMethod(genericArguments);
}
#endregion
default:
throw new ArgumentException(Environment.GetResourceString("Serialization_MemberTypeNotRecognized"));
}
}
#endregion
}
}
// 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
- ListenerChannelContext.cs
- TreeNodeClickEventArgs.cs
- TransactionManagerProxy.cs
- DynamicValidatorEventArgs.cs
- FontWeights.cs
- TraceContext.cs
- CompilationUtil.cs
- SQLStringStorage.cs
- ElementFactory.cs
- BinHexEncoder.cs
- StringComparer.cs
- ProviderException.cs
- TextSpanModifier.cs
- ClientApiGenerator.cs
- CodeIndexerExpression.cs
- OletxTransactionManager.cs
- CustomErrorsSectionWrapper.cs
- OrderToken.cs
- XamlReaderConstants.cs
- RuntimeConfigLKG.cs
- AutoCompleteStringCollection.cs
- InputQueue.cs
- ProcessRequestArgs.cs
- BackgroundFormatInfo.cs
- KeyValuePair.cs
- ExtendedTransformFactory.cs
- ReadOnlyDictionary.cs
- DBConcurrencyException.cs
- TextShapeableCharacters.cs
- MarshalByValueComponent.cs
- InstanceCreationEditor.cs
- PartBasedPackageProperties.cs
- PerformanceCounterCategory.cs
- SqlLiftWhereClauses.cs
- NTAccount.cs
- RelationshipDetailsCollection.cs
- _FtpControlStream.cs
- Transform3DGroup.cs
- SBCSCodePageEncoding.cs
- VariableAction.cs
- ViewUtilities.cs
- PolyBezierSegmentFigureLogic.cs
- DockPattern.cs
- AuthenticationService.cs
- SchemaObjectWriter.cs
- DynamicDataExtensions.cs
- PackageDigitalSignatureManager.cs
- TraceListeners.cs
- StylusShape.cs
- _TransmitFileOverlappedAsyncResult.cs
- SqlCharStream.cs
- ExpressionSelection.cs
- __Filters.cs
- WebPartConnectionsCancelEventArgs.cs
- OutgoingWebResponseContext.cs
- LinkConverter.cs
- WebPartHelpVerb.cs
- ServiceDescription.cs
- CryptoKeySecurity.cs
- MetaData.cs
- ColorAnimationUsingKeyFrames.cs
- EmptyReadOnlyDictionaryInternal.cs
- XmlTypeMapping.cs
- LeafCellTreeNode.cs
- Compiler.cs
- BooleanAnimationUsingKeyFrames.cs
- ProcessHostMapPath.cs
- safesecurityhelperavalon.cs
- WindowsAuthenticationModule.cs
- InheritanceUI.cs
- SqlCachedBuffer.cs
- SmtpNetworkElement.cs
- VerticalAlignConverter.cs
- MarginsConverter.cs
- SafeLocalAllocation.cs
- ImmutablePropertyDescriptorGridEntry.cs
- DropShadowEffect.cs
- BasePattern.cs
- RuntimeEnvironment.cs
- ToolStripDropTargetManager.cs
- TypeBuilder.cs
- Repeater.cs
- DropTarget.cs
- FamilyTypefaceCollection.cs
- CalendarDay.cs
- DocumentApplication.cs
- DateTimeConverter.cs
- SelectManyQueryOperator.cs
- EntityDataSourceChangingEventArgs.cs
- ModelFunction.cs
- DataViewSetting.cs
- BitmapEffectDrawingContextState.cs
- AxHostDesigner.cs
- WindowsAuthenticationModule.cs
- DataControlReferenceCollection.cs
- Color.cs
- RowSpanVector.cs
- UpDownBase.cs
- ModelProperty.cs
- coordinatorfactory.cs