System.Runtime.Serialization.ObjectRecord.DoFixups C# (CSharp) Method

DoFixups() public method

public DoFixups ( bool asContainer, ObjectManager manager, bool strict ) : bool
asContainer bool
manager ObjectManager
strict bool
return bool
        public bool DoFixups(bool asContainer, ObjectManager manager, bool strict)
        {
            BaseFixupRecord prevFixup = null;
            BaseFixupRecord fixup = asContainer ? FixupChainAsContainer : FixupChainAsRequired;
            bool allFixed = true;

            while (fixup != null) {
                if (fixup.DoFixup(manager, strict)) {
                    UnchainFixup(fixup, prevFixup, asContainer);
                    if (asContainer) fixup.ObjectRequired.RemoveFixup(fixup, false);
                    else fixup.ObjectToBeFixed.RemoveFixup(fixup, true);
                } else {
                    prevFixup = fixup;
                    allFixed = false;
                }

                fixup = asContainer ? fixup.NextSameContainer : fixup.NextSameRequired;
            }
            return allFixed;
        }

Usage Example

コード例 #1
0
ファイル: ObjectManager.cs プロジェクト: zgramana/mono
        private void RegisterObjectInternal(object obj, ObjectRecord record)
        {
            if (obj == null)
            {
                throw new ArgumentNullException("obj");
            }

            if (record.IsRegistered)
            {
                if (record.OriginalObject != obj)
                {
                    throw new SerializationException("An object with Id " + record.ObjectID + " has already been registered");
                }
                else
                {
                    return;
                }
            }

            record.ObjectInstance = obj;
            record.OriginalObject = obj;

            if (obj is IObjectReference)
            {
                record.Status = ObjectRecordStatus.ReferenceUnsolved;
            }
            else
            {
                record.Status = ObjectRecordStatus.ReferenceSolved;
            }

            if (_selector != null)
            {
                record.Surrogate = _selector.GetSurrogate(
                    obj.GetType(), _context, out record.SurrogateSelector);
                if (record.Surrogate != null)
                {
                    record.Status = ObjectRecordStatus.ReferenceUnsolved;
                }
            }

            record.DoFixups(true, this, false);
            record.DoFixups(false, this, false);
            _registeredObjectsCount++;

            // Adds the object to the chain of registered objects. This chain
            // is needed to be able to to perform the final fixups in the right order

            if (_objectRecordChain == null)
            {
                _objectRecordChain = record;
                _lastObjectRecord  = record;
            }
            else
            {
                _lastObjectRecord.Next = record;
                _lastObjectRecord      = record;
            }
        }
All Usage Examples Of System.Runtime.Serialization.ObjectRecord::DoFixups