Files
2026-06-04 11:42:34 +02:00

144 lines
5.3 KiB
C#

using System;
using System.Runtime.Serialization;
namespace System.Reflection
{
// Token: 0x02000249 RID: 585
[Serializable]
internal class MemberInfoSerializationHolder : ISerializable, IObjectReference
{
// Token: 0x06001E4A RID: 7754 RVA: 0x00070AE4 File Offset: 0x0006ECE4
private MemberInfoSerializationHolder(SerializationInfo info, StreamingContext ctx)
{
string @string = info.GetString("AssemblyName");
string string2 = info.GetString("ClassName");
this._memberName = info.GetString("Name");
this._memberSignature = info.GetString("Signature");
this._memberType = (MemberTypes)info.GetInt32("MemberType");
try
{
this._genericArguments = null;
}
catch (SerializationException)
{
}
Assembly assembly = Assembly.Load(@string);
this._reflectedType = assembly.GetType(string2, true, true);
}
// Token: 0x06001E4B RID: 7755 RVA: 0x00070B88 File Offset: 0x0006ED88
public static void Serialize(SerializationInfo info, string name, Type klass, string signature, MemberTypes type)
{
MemberInfoSerializationHolder.Serialize(info, name, klass, signature, type, null);
}
// Token: 0x06001E4C RID: 7756 RVA: 0x00070B98 File Offset: 0x0006ED98
public static void Serialize(SerializationInfo info, string name, Type klass, string signature, MemberTypes type, Type[] genericArguments)
{
info.SetType(typeof(MemberInfoSerializationHolder));
info.AddValue("AssemblyName", klass.Module.Assembly.FullName, typeof(string));
info.AddValue("ClassName", klass.FullName, typeof(string));
info.AddValue("Name", name, typeof(string));
info.AddValue("Signature", signature, typeof(string));
info.AddValue("MemberType", (int)type);
info.AddValue("GenericArguments", genericArguments, typeof(Type[]));
}
// Token: 0x06001E4D RID: 7757 RVA: 0x00070C48 File Offset: 0x0006EE48
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
throw new NotSupportedException();
}
// Token: 0x06001E4E RID: 7758 RVA: 0x00070C50 File Offset: 0x0006EE50
public object GetRealObject(StreamingContext context)
{
MemberTypes memberType = this._memberType;
switch (memberType)
{
case MemberTypes.Constructor:
{
ConstructorInfo[] constructors = this._reflectedType.GetConstructors(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
for (int i = 0; i < constructors.Length; i++)
{
if (constructors[i].ToString().Equals(this._memberSignature))
{
return constructors[i];
}
}
throw new SerializationException(string.Format("Could not find constructor '{0}' in type '{1}'", this._memberSignature, this._reflectedType));
}
case MemberTypes.Event:
{
EventInfo @event = this._reflectedType.GetEvent(this._memberName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
if (@event != null)
{
return @event;
}
throw new SerializationException(string.Format("Could not find event '{0}' in type '{1}'", this._memberName, this._reflectedType));
}
default:
{
if (memberType != MemberTypes.Property)
{
throw new SerializationException(string.Format("Unhandled MemberType {0}", this._memberType));
}
PropertyInfo property = this._reflectedType.GetProperty(this._memberName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
if (property != null)
{
return property;
}
throw new SerializationException(string.Format("Could not find property '{0}' in type '{1}'", this._memberName, this._reflectedType));
}
case MemberTypes.Field:
{
FieldInfo field = this._reflectedType.GetField(this._memberName, BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
if (field != null)
{
return field;
}
throw new SerializationException(string.Format("Could not find field '{0}' in type '{1}'", this._memberName, this._reflectedType));
}
case MemberTypes.Method:
{
MethodInfo[] methods = this._reflectedType.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
for (int j = 0; j < methods.Length; j++)
{
if (methods[j].ToString().Equals(this._memberSignature))
{
return methods[j];
}
if (this._genericArguments != null && methods[j].IsGenericMethod && methods[j].GetGenericArguments().Length == this._genericArguments.Length)
{
MethodInfo methodInfo = methods[j].MakeGenericMethod(this._genericArguments);
if (methodInfo.ToString() == this._memberSignature)
{
return methodInfo;
}
}
}
throw new SerializationException(string.Format("Could not find method '{0}' in type '{1}'", this._memberSignature, this._reflectedType));
}
}
}
// Token: 0x04000A65 RID: 2661
private const BindingFlags DefaultBinding = BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic;
// Token: 0x04000A66 RID: 2662
private readonly string _memberName;
// Token: 0x04000A67 RID: 2663
private readonly string _memberSignature;
// Token: 0x04000A68 RID: 2664
private readonly MemberTypes _memberType;
// Token: 0x04000A69 RID: 2665
private readonly Type _reflectedType;
// Token: 0x04000A6A RID: 2666
private readonly Type[] _genericArguments;
}
}