internal void StartChildren()
{
#if _DEBUG
InternalST.Soap( this,SerTraceString("StartChildren Begin ", (ParseRecord)stack.Peek(), null, currentState, headerState));
#endif
ParseRecord pr = null;
switch (currentState)
{
case InternalParseStateE.Object:
InternalST.Soap( this,"StartChildren Object");
pr = (ParseRecord)stack.Peek();
ParseRecord objectPr = (ParseRecord)stack.PeekPeek();
ProcessAttributes(pr, objectPr);
if (pr.PRarrayTypeEnum != InternalArrayTypeE.Base64)
{
if (!((pr.PRparseTypeEnum == InternalParseTypeE.Envelope) || (pr.PRparseTypeEnum == InternalParseTypeE.Body)))
{
currentState = InternalParseStateE.Member;
}
switch (headerState)
{
case HeaderStateEnum.None:
case HeaderStateEnum.TopLevelObject:
InternalST.Soap( this,"ObjectReader.Parse 8");
InternalST.Soap( this,"SoapParser.StartChildren TopFound "+isTopFound+" objectPr.parseTypeEnum "+(objectPr == null?"null":((Enum)objectPr.PRparseTypeEnum).ToString()));
if (!isTopFound && (objectPr != null ) && (objectPr.PRparseTypeEnum == InternalParseTypeE.Body))
{
pr.PRobjectPositionEnum = InternalObjectPositionE.Top;
isTopFound = true;
InternalST.Soap( this,"SoapParser.StartChildren change position to top");
}
objectReader.Parse(pr);
pr.PRisParsed = true;
break;
case HeaderStateEnum.HeaderRecord:
case HeaderStateEnum.NestedObject:
case HeaderStateEnum.FirstHeaderRecord:
ProcessHeader(pr);
break;
}
}
break;
case InternalParseStateE.Member:
InternalST.Soap( this,"StartChildren Member");
pr = (ParseRecord)stack.Peek();
currentState = InternalParseStateE.MemberChild;
break;
case InternalParseStateE.MemberChild:
default:
MarshalError("StartChildren", (ParseRecord)stack.Peek(), null, currentState);
break;
}
#if _DEBUG
InternalST.Soap( this, "StartChildren 10");
InternalST.Soap( this,SerTraceString("StartChildren End ", (ParseRecord)stack.Peek(), null, currentState, headerState));
#endif
}