Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ RegisterObject() [4/4]

void System.Runtime.Serialization.ObjectManager.RegisterObject ( object obj,
long objectID,
SerializationInfo? info,
long idOfContainingObj,
MemberInfo? member,
int?[] arrayIndex )
inline

Definition at line 470 of file ObjectManager.cs.

471 {
472 if (obj == null)
473 {
474 throw new ArgumentNullException("obj");
475 }
476 if (objectID <= 0)
477 {
478 throw new ArgumentOutOfRangeException("objectID", System.SR.ArgumentOutOfRange_ObjectID);
479 }
480 if (member != null && !(member is FieldInfo))
481 {
482 throw new SerializationException(System.SR.Serialization_UnknownMemberInfo);
483 }
484 ISerializationSurrogate surrogate = null;
485 if (_selector != null)
486 {
487 Type type = (CanCallGetType(obj) ? obj.GetType() : typeof(MarshalByRefObject));
488 surrogate = _selector.GetSurrogate(type, _context, out ISurrogateSelector _);
489 }
490 if (obj is IDeserializationCallback)
491 {
492 DeserializationEventHandler handler = ((IDeserializationCallback)obj).OnDeserialization;
493 AddOnDeserialization(handler);
494 }
495 if (arrayIndex != null)
496 {
497 arrayIndex = (int[])arrayIndex.Clone();
498 }
499 ObjectHolder objectHolder = FindObjectHolder(objectID);
500 if (objectHolder == null)
501 {
504 if (objectHolder.RequiresDelayedFixup)
505 {
507 }
509 return;
510 }
511 if (objectHolder.ObjectValue != null)
512 {
513 throw new SerializationException(System.SR.Serialization_RegisterTwice);
514 }
515 objectHolder.UpdateData(obj, info, surrogate, idOfContainingObj, (FieldInfo)member, arrayIndex, this);
516 if (objectHolder.DirectlyDependentObjects > 0)
517 {
519 }
520 if (objectHolder.RequiresDelayedFixup)
521 {
523 }
524 if (objectHolder.CompletelyFixed)
525 {
528 }
529 if (objectHolder.TotalDependentObjects > 0)
530 {
532 }
533 else
534 {
536 }
537 }
void CompleteObject(ObjectHolder holder, bool bObjectFullyComplete)
virtual void AddOnDeserialization(DeserializationEventHandler handler)
virtual void RaiseOnDeserializedEvent(object obj)
void AddObjectHolder(ObjectHolder holder)
readonly ISurrogateSelector _selector
void DoNewlyRegisteredObjectFixups(ObjectHolder holder)
ObjectHolder FindObjectHolder(long objectID)
static string ArgumentOutOfRange_ObjectID
Definition SR.cs:52
static string Serialization_UnknownMemberInfo
Definition SR.cs:22
static string Serialization_RegisterTwice
Definition SR.cs:54
Definition SR.cs:7
ISerializationSurrogate? GetSurrogate(Type type, StreamingContext context, out ISurrogateSelector selector)

References System.Runtime.Serialization.ObjectManager._context, System.Runtime.Serialization.ObjectManager._selector, System.Runtime.Serialization.ObjectHolderList.Add(), System.Runtime.Serialization.ObjectManager.AddObjectHolder(), System.Runtime.Serialization.ObjectManager.AddOnDeserialization(), System.Runtime.Serialization.ObjectManager.AddOnDeserialized(), System.SR.ArgumentOutOfRange_ObjectID, System.arrayIndex, System.Runtime.Serialization.ObjectManager.CanCallGetType(), System.Runtime.Serialization.ObjectManager.CompleteObject(), System.Runtime.Serialization.Dictionary, System.Runtime.Serialization.ObjectManager.DoNewlyRegisteredObjectFixups(), System.Runtime.Serialization.ObjectManager.FindObjectHolder(), System.Runtime.Serialization.ISurrogateSelector.GetSurrogate(), System.info, System.obj, System.Runtime.Serialization.ObjectManager.RaiseOnDeserializedEvent(), System.SR.Serialization_RegisterTwice, System.SR.Serialization_UnknownMemberInfo, System.Runtime.Serialization.ObjectManager.SpecialFixupObjects, and System.type.