System.Runtime.Serialization.Formatters.Binary.ValueFixup.Fixup C# (CSharp) Method

Fixup() private method

private Fixup ( ParseRecord record, ParseRecord parent ) : void
record ParseRecord
parent ParseRecord
return void
        internal void Fixup(ParseRecord record, ParseRecord parent)
        {
            object obj = record._newObj;
            switch (_valueFixupEnum)
            {
                case ValueFixupEnum.Array:
                    _arrayObj.SetValue(obj, _indexMap);
                    break;
                case ValueFixupEnum.Header:  
                    throw new PlatformNotSupportedException();
                case ValueFixupEnum.Member:
                    if (_objectInfo._isSi)
                    {
                        _objectInfo._objectManager.RecordDelayedFixup(parent._objectId, _memberName, record._objectId);
                    }
                    else
                    {
                        MemberInfo memberInfo = _objectInfo.GetMemberInfo(_memberName);
                        if (memberInfo != null)
                        {
                            _objectInfo._objectManager.RecordFixup(parent._objectId, memberInfo, record._objectId);
                        }
                    }
                    break;
            }
        }
    }

Usage Example

示例#1
0
        // End of object encountered in stream
        private void ParseObjectEnd(ParseRecord pr)
        {
            ParseRecord objectPr = (ParseRecord)_stack.Peek() ?? pr;

            if (objectPr._objectPositionEnum == InternalObjectPositionE.Top)
            {
                if (ReferenceEquals(objectPr._dtType, Converter.s_typeofString))
                {
                    objectPr._newObj = objectPr._value;
                    TopObject        = objectPr._newObj;
                    return;
                }
            }

            _stack.Pop();
            ParseRecord parentPr = (ParseRecord)_stack.Peek();

            if (objectPr._newObj == null)
            {
                return;
            }

            if (objectPr._objectTypeEnum == InternalObjectTypeE.Array)
            {
                if (objectPr._objectPositionEnum == InternalObjectPositionE.Top)
                {
                    TopObject = objectPr._newObj;
                }

                RegisterObject(objectPr._newObj, objectPr, parentPr);
                return;
            }

            objectPr._objectInfo.PopulateObjectMembers(objectPr._newObj, objectPr._memberData);

            // Registration is after object is populated
            if ((!objectPr._isRegistered) && (objectPr._objectId > 0))
            {
                RegisterObject(objectPr._newObj, objectPr, parentPr);
            }

            if (objectPr._isValueTypeFixup)
            {
                ValueFixup fixup = (ValueFixup)ValueFixupStack.Pop(); //Value fixup
                fixup.Fixup(objectPr, parentPr);                      // Value fixup
            }

            if (objectPr._objectPositionEnum == InternalObjectPositionE.Top)
            {
                TopObject = objectPr._newObj;
            }

            objectPr._objectInfo.ObjectEnd();
        }
All Usage Examples Of System.Runtime.Serialization.Formatters.Binary.ValueFixup::Fixup