/// <summary> /// Reads the object using reflection. /// /// REMARK: this method is not thread-safe /// </summary> /// <param name="objectReader">Object reader</param> /// <param name="actualType">Type of object to deserialize</param> /// <param name="objectId">Identifier of object to deserialize</param> internal static void ReadObjectInnerUsingReflection(ObjectReader objectReader, Type actualType, int objectId) { objectReader.TryTouchObject(actualType, objectId); switch (GetCreationWay(actualType, objectReader.treatCollectionAsUserObject)) { case CreationWay.Null: objectReader.ReadNotPrecreated(actualType, objectId); break; case CreationWay.DefaultCtor: objectReader.UpdateElements(actualType, objectId); break; case CreationWay.Uninitialized: objectReader.UpdateFields(actualType, objectReader.GetObjectByReferenceId(objectId)); break; } }