コード例 #1
0
        /// <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;
            }
        }