This commit is contained in:
niko
2026-06-04 11:42:34 +02:00
parent f39ba70a9f
commit e720b98cd1
7488 changed files with 2493818 additions and 0 deletions
@@ -0,0 +1,295 @@
using System;
using System.Reflection;
namespace System.Runtime.Serialization
{
// Token: 0x0200048A RID: 1162
internal class ObjectRecord
{
// Token: 0x06002C26 RID: 11302 RVA: 0x00091648 File Offset: 0x0008F848
public void SetMemberValue(ObjectManager manager, MemberInfo member, object value)
{
if (member is FieldInfo)
{
((FieldInfo)member).SetValue(this.ObjectInstance, value);
}
else
{
if (!(member is PropertyInfo))
{
throw new SerializationException("Cannot perform fixup");
}
((PropertyInfo)member).SetValue(this.ObjectInstance, value, null);
}
if (this.Member != null)
{
ObjectRecord objectRecord = manager.GetObjectRecord(this.IdOfContainingObj);
if (objectRecord.IsRegistered)
{
objectRecord.SetMemberValue(manager, this.Member, this.ObjectInstance);
}
}
else if (this.ArrayIndex != null)
{
ObjectRecord objectRecord2 = manager.GetObjectRecord(this.IdOfContainingObj);
if (objectRecord2.IsRegistered)
{
objectRecord2.SetArrayValue(manager, this.ObjectInstance, this.ArrayIndex);
}
}
}
// Token: 0x06002C27 RID: 11303 RVA: 0x00091718 File Offset: 0x0008F918
public void SetArrayValue(ObjectManager manager, object value, int[] indices)
{
((Array)this.ObjectInstance).SetValue(value, indices);
}
// Token: 0x06002C28 RID: 11304 RVA: 0x0009172C File Offset: 0x0008F92C
public void SetMemberValue(ObjectManager manager, string memberName, object value)
{
if (this.Info == null)
{
throw new SerializationException("Cannot perform fixup");
}
this.Info.AddValue(memberName, value, value.GetType());
}
// Token: 0x1700089B RID: 2203
// (get) Token: 0x06002C29 RID: 11305 RVA: 0x00091758 File Offset: 0x0008F958
public bool IsInstanceReady
{
get
{
return this.IsRegistered && !this.IsUnsolvedObjectReference && (!this.ObjectInstance.GetType().IsValueType || (!this.HasPendingFixups && this.Info == null));
}
}
// Token: 0x1700089C RID: 2204
// (get) Token: 0x06002C2A RID: 11306 RVA: 0x000917B0 File Offset: 0x0008F9B0
public bool IsUnsolvedObjectReference
{
get
{
return this.Status != ObjectRecordStatus.ReferenceSolved;
}
}
// Token: 0x1700089D RID: 2205
// (get) Token: 0x06002C2B RID: 11307 RVA: 0x000917C0 File Offset: 0x0008F9C0
public bool IsRegistered
{
get
{
return this.Status != ObjectRecordStatus.Unregistered;
}
}
// Token: 0x06002C2C RID: 11308 RVA: 0x000917D0 File Offset: 0x0008F9D0
public bool DoFixups(bool asContainer, ObjectManager manager, bool strict)
{
BaseFixupRecord baseFixupRecord = null;
BaseFixupRecord baseFixupRecord2 = ((!asContainer) ? this.FixupChainAsRequired : this.FixupChainAsContainer);
bool flag = true;
while (baseFixupRecord2 != null)
{
if (baseFixupRecord2.DoFixup(manager, strict))
{
this.UnchainFixup(baseFixupRecord2, baseFixupRecord, asContainer);
if (asContainer)
{
baseFixupRecord2.ObjectRequired.RemoveFixup(baseFixupRecord2, false);
}
else
{
baseFixupRecord2.ObjectToBeFixed.RemoveFixup(baseFixupRecord2, true);
}
}
else
{
baseFixupRecord = baseFixupRecord2;
flag = false;
}
baseFixupRecord2 = ((!asContainer) ? baseFixupRecord2.NextSameRequired : baseFixupRecord2.NextSameContainer);
}
return flag;
}
// Token: 0x06002C2D RID: 11309 RVA: 0x00091864 File Offset: 0x0008FA64
public void RemoveFixup(BaseFixupRecord fixupToRemove, bool asContainer)
{
BaseFixupRecord baseFixupRecord = null;
for (BaseFixupRecord baseFixupRecord2 = ((!asContainer) ? this.FixupChainAsRequired : this.FixupChainAsContainer); baseFixupRecord2 != null; baseFixupRecord2 = ((!asContainer) ? baseFixupRecord2.NextSameRequired : baseFixupRecord2.NextSameContainer))
{
if (baseFixupRecord2 == fixupToRemove)
{
this.UnchainFixup(baseFixupRecord2, baseFixupRecord, asContainer);
return;
}
baseFixupRecord = baseFixupRecord2;
}
}
// Token: 0x06002C2E RID: 11310 RVA: 0x000918C4 File Offset: 0x0008FAC4
private void UnchainFixup(BaseFixupRecord fixup, BaseFixupRecord prevFixup, bool asContainer)
{
if (prevFixup == null)
{
if (asContainer)
{
this.FixupChainAsContainer = fixup.NextSameContainer;
}
else
{
this.FixupChainAsRequired = fixup.NextSameRequired;
}
}
else if (asContainer)
{
prevFixup.NextSameContainer = fixup.NextSameContainer;
}
else
{
prevFixup.NextSameRequired = fixup.NextSameRequired;
}
}
// Token: 0x06002C2F RID: 11311 RVA: 0x00091924 File Offset: 0x0008FB24
public void ChainFixup(BaseFixupRecord fixup, bool asContainer)
{
if (asContainer)
{
fixup.NextSameContainer = this.FixupChainAsContainer;
this.FixupChainAsContainer = fixup;
}
else
{
fixup.NextSameRequired = this.FixupChainAsRequired;
this.FixupChainAsRequired = fixup;
}
}
// Token: 0x06002C30 RID: 11312 RVA: 0x00091958 File Offset: 0x0008FB58
public bool LoadData(ObjectManager manager, ISurrogateSelector selector, StreamingContext context)
{
if (this.Info != null)
{
if (this.Surrogate != null)
{
object obj = this.Surrogate.SetObjectData(this.ObjectInstance, this.Info, context, this.SurrogateSelector);
if (obj != null)
{
this.ObjectInstance = obj;
}
this.Status = ObjectRecordStatus.ReferenceSolved;
}
else
{
if (!(this.ObjectInstance is ISerializable))
{
throw new SerializationException("No surrogate selector was found for type " + this.ObjectInstance.GetType().FullName);
}
object[] array = new object[] { this.Info, context };
ConstructorInfo constructor = this.ObjectInstance.GetType().GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, new Type[]
{
typeof(SerializationInfo),
typeof(StreamingContext)
}, null);
if (constructor == null)
{
throw new SerializationException("The constructor to deserialize an object of type " + this.ObjectInstance.GetType().FullName + " was not found.");
}
constructor.Invoke(this.ObjectInstance, array);
}
this.Info = null;
}
if (this.ObjectInstance is IObjectReference && this.Status != ObjectRecordStatus.ReferenceSolved)
{
try
{
this.ObjectInstance = ((IObjectReference)this.ObjectInstance).GetRealObject(context);
int num = 100;
while (this.ObjectInstance is IObjectReference && num > 0)
{
object realObject = ((IObjectReference)this.ObjectInstance).GetRealObject(context);
if (realObject == this.ObjectInstance)
{
break;
}
this.ObjectInstance = realObject;
num--;
}
if (num == 0)
{
throw new SerializationException("The implementation of the IObjectReference interface returns too many nested references to other objects that implement IObjectReference.");
}
this.Status = ObjectRecordStatus.ReferenceSolved;
}
catch (NullReferenceException)
{
return false;
}
}
if (this.Member != null)
{
ObjectRecord objectRecord = manager.GetObjectRecord(this.IdOfContainingObj);
objectRecord.SetMemberValue(manager, this.Member, this.ObjectInstance);
}
else if (this.ArrayIndex != null)
{
ObjectRecord objectRecord2 = manager.GetObjectRecord(this.IdOfContainingObj);
objectRecord2.SetArrayValue(manager, this.ObjectInstance, this.ArrayIndex);
}
return true;
}
// Token: 0x1700089E RID: 2206
// (get) Token: 0x06002C31 RID: 11313 RVA: 0x00091BA4 File Offset: 0x0008FDA4
public bool HasPendingFixups
{
get
{
return this.FixupChainAsContainer != null;
}
}
// Token: 0x04001119 RID: 4377
public ObjectRecordStatus Status;
// Token: 0x0400111A RID: 4378
public object OriginalObject;
// Token: 0x0400111B RID: 4379
public object ObjectInstance;
// Token: 0x0400111C RID: 4380
public long ObjectID;
// Token: 0x0400111D RID: 4381
public SerializationInfo Info;
// Token: 0x0400111E RID: 4382
public long IdOfContainingObj;
// Token: 0x0400111F RID: 4383
public ISerializationSurrogate Surrogate;
// Token: 0x04001120 RID: 4384
public ISurrogateSelector SurrogateSelector;
// Token: 0x04001121 RID: 4385
public MemberInfo Member;
// Token: 0x04001122 RID: 4386
public int[] ArrayIndex;
// Token: 0x04001123 RID: 4387
public BaseFixupRecord FixupChainAsContainer;
// Token: 0x04001124 RID: 4388
public BaseFixupRecord FixupChainAsRequired;
// Token: 0x04001125 RID: 4389
public ObjectRecord Next;
}
}