// 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();
}