We need you! We're working hard on the next version of Developer Fusion -
Let us know what you think we should be up to!
- namespace System.Runtime.Serialization.Formatters.Soap
- {
- using System;
- using System.Runtime.Serialization.Formatters;
- using System.Xml;
- using System.IO;
- using System.Globalization;
- using System.Collections;
- using System.Reflection;
- using System.Runtime.Serialization;
- using System.Text;
- using System.Runtime.Remoting;
- using System.Runtime.Remoting.Messaging;
- using System.Runtime.Remoting.Metadata;
-
-
- internal sealed class SoapParser : ISerParser
- {
- internal XmlTextReader xmlReader;
- internal SoapHandler soapHandler;
- internal ObjectReader objectReader;
- internal bool bStop = false;
- int depth = 0;
- bool bDebug = false;
- TextReader textReader = null;
-
- internal SoapParser(Stream stream)
- {
- InternalST.Soap(this, "Constructor");
- TraceStream(stream);
- if (bDebug)
- xmlReader = new XmlTextReader(textReader);
- else
- xmlReader = new XmlTextReader(stream);
- xmlReader.XmlResolver = null;
- xmlReader.ProhibitDtd = true;
- soapHandler = new SoapHandler(this);
- }
-
-
-
- [System.Diagnostics.Conditional("_LOGGING")]
- private void TraceStream(Stream stream)
- {
- bDebug = true;
- TextReader tempReader = new StreamReader(stream);
- string strbuffer = tempReader.ReadToEnd();
- InternalST.InfoSoap("******************** Begin Deserialized Stream Buffer *******************");
- InternalST.InfoSoap(strbuffer);
- InternalST.InfoSoap("******************** End Deserialized Stream Buffer *******************");
- textReader = new StringReader(strbuffer);
- }
-
-
- internal void Init(ObjectReader objectReader)
- {
- InternalST.Soap(this, "Init");
- this.objectReader = objectReader;
- soapHandler.Init(objectReader);
- bStop = false;
- depth = 0;
- xmlReader.ResetState();
- }
-
-
- public void Run()
- {
- InternalST.Soap(this, "Run");
- try {
- soapHandler.Start(xmlReader);
- ParseXml();
- }
- catch (EndOfStreamException) {
- }
- }
-
- internal void Stop()
- {
- InternalST.Soap(this, "Stop");
- bStop = true;
- }
-
-
- private void ParseXml()
- {
- InternalST.Soap(this, "ParseXml");
- while (!bStop && xmlReader.Read()) {
- if (depth < xmlReader.Depth) {
- soapHandler.StartChildren();
- depth = xmlReader.Depth;
- }
- else if (depth > xmlReader.Depth) {
- soapHandler.FinishChildren(xmlReader.Prefix, xmlReader.LocalName, xmlReader.NamespaceURI);
- depth = xmlReader.Depth;
- }
-
- switch (xmlReader.NodeType) {
- case (XmlNodeType.None):
- break;
- case (XmlNodeType.Element):
- Dump("Node Element", xmlReader);
- soapHandler.StartElement(xmlReader.Prefix, xmlReader.LocalName, xmlReader.NamespaceURI);
- int attributeCount = xmlReader.AttributeCount;
- while (xmlReader.MoveToNextAttribute()) {
- soapHandler.Attribute(xmlReader.Prefix, xmlReader.LocalName, xmlReader.NamespaceURI, xmlReader.Value);
- }
- xmlReader.MoveToElement();
- if (xmlReader.IsEmptyElement)
- soapHandler.EndElement(xmlReader.Prefix, xmlReader.LocalName, xmlReader.NamespaceURI);
- break;
- case XmlNodeType.EndElement:
- Dump("Node EndElement", xmlReader);
- soapHandler.EndElement(xmlReader.Prefix, xmlReader.LocalName, xmlReader.NamespaceURI);
- break;
- case (XmlNodeType.Text):
- Dump("Node Text", xmlReader);
- soapHandler.Text(xmlReader.Value);
- break;
- case (XmlNodeType.SignificantWhitespace):
- Dump("Node SignificantWhitespace", xmlReader);
- soapHandler.Text(xmlReader.Value);
- break;
- case (XmlNodeType.Whitespace):
- Dump("Node Whitespace", xmlReader);
- soapHandler.Text(xmlReader.Value);
- break;
- case (XmlNodeType.Entity):
- Dump("Node Entity", xmlReader);
- break;
- case (XmlNodeType.CDATA):
- Dump("Node CDATA", xmlReader);
- soapHandler.Text(xmlReader.Value);
- break;
- case (XmlNodeType.Comment):
- Dump("Node Comment", xmlReader);
- soapHandler.Comment(xmlReader.Value);
- break;
- case (XmlNodeType.EntityReference):
- Dump("Node EntityReference", xmlReader);
- break;
- case (XmlNodeType.ProcessingInstruction):
- Dump("Node ProcessingInstruction", xmlReader);
- break;
- case (XmlNodeType.Document):
- Dump("Node Document", xmlReader);
- break;
- case (XmlNodeType.DocumentType):
- Dump("Node DocumentType", xmlReader);
- break;
- case (XmlNodeType.DocumentFragment):
- Dump("Node DocumentFragment", xmlReader);
- break;
- case (XmlNodeType.Notation):
- Dump("Node Notation", xmlReader);
- break;
- case (XmlNodeType.EndEntity):
- Dump("Node EndEntity", xmlReader);
- break;
- default:
- Dump("Node Default", xmlReader);
- break;
- }
-
- }
- }
-
- [System.Diagnostics.Conditional("SER_LOGGING")]
- private static void Dump(string name, XmlReader xmlReader)
- {
- InternalST.Soap("========== " + name + " ============");
- InternalST.Soap("Prefix : " + xmlReader.Prefix);
- InternalST.Soap("Name : " + xmlReader.Name);
- InternalST.Soap("LocalName : " + xmlReader.LocalName);
- InternalST.Soap("Namespace : " + xmlReader.NamespaceURI);
- InternalST.Soap("Depth : " + xmlReader.Depth);
- InternalST.Soap("Value : [" + xmlReader.Value + "]");
- InternalST.Soap("IsDefault : " + xmlReader.IsDefault);
- InternalST.Soap("XmlSpace : " + xmlReader.XmlSpace);
- InternalST.Soap("XmlLang : " + xmlReader.XmlLang);
- InternalST.Soap("QuoteChar : " + xmlReader.QuoteChar);
- InternalST.Soap("================================\n");
- }
-
- }
-
-
- internal sealed class SoapHandler
- {
- SerStack stack = new SerStack("SoapParser Stack");
-
- XmlTextReader xmlTextReader = null;
- SoapParser soapParser = null;
-
-
-
- string textValue = "";
-
-
- ObjectReader objectReader;
- internal Hashtable keyToNamespaceTable;
-
-
- InternalParseStateE currentState;
- bool isEnvelope = false;
- bool isBody = false;
- bool isTopFound = false;
- HeaderStateEnum headerState = HeaderStateEnum.None;
-
-
- SerStack attributeValues = new SerStack("AttributePrefix");
-
- SerStack prPool = new SerStack("prPool");
-
-
-
-
- Hashtable assemKeyToAssemblyTable = null;
- Hashtable assemKeyToNameSpaceTable = null;
- Hashtable assemKeyToInteropAssemblyTable = null;
- Hashtable nameSpaceToKey = null;
-
- string soapKey = "SOAP-ENC";
-
- string urtKey = "urt";
-
- string soapEnvKey = "SOAP-ENV";
-
- string xsiKey = "xsi";
-
- string xsdKey = "xsd";
-
- int nextPrefix = 0;
-
- internal SoapHandler(SoapParser soapParser)
- {
- this.soapParser = soapParser;
- }
-
- internal void Init(ObjectReader objectReader)
- {
- this.objectReader = objectReader;
- objectReader.soapHandler = this;
- isEnvelope = false;
- isBody = false;
- isTopFound = false;
- attributeValues.Clear();
- assemKeyToAssemblyTable = new Hashtable(10);
- assemKeyToAssemblyTable[urtKey] = new SoapAssemblyInfo(SoapUtil.urtAssemblyString, SoapUtil.urtAssembly);
- assemKeyToNameSpaceTable = new Hashtable(10);
- assemKeyToInteropAssemblyTable = new Hashtable(10);
- nameSpaceToKey = new Hashtable(5);
- keyToNamespaceTable = new Hashtable(10);
-
- }
-
- private string NextPrefix()
- {
- nextPrefix++;
- return "_P" + nextPrefix;
-
- }
-
- internal class AttributeValueEntry
- {
- internal string prefix;
- internal string key;
- internal string value;
- internal string urn;
-
- internal AttributeValueEntry(string prefix, string key, string value, string urn)
- {
- this.prefix = prefix;
- this.key = key;
- this.value = value;
- this.urn = urn;
- }
- }
-
- private ParseRecord GetPr()
- {
- ParseRecord pr = null;
-
- if (!prPool.IsEmpty()) {
- pr = (ParseRecord)prPool.Pop();
- pr.Init();
- }
- else
- pr = new ParseRecord();
-
- return pr;
- }
-
- private void PutPr(ParseRecord pr)
- {
- prPool.Push(pr);
- }
-
-
- private static string SerTraceString(string handler, ParseRecord pr, string value, InternalParseStateE currentState, HeaderStateEnum headerState)
- {
- string valueString = "";
- if (value != null)
- valueString = value;
-
- string prString = "";
- if (pr != null)
- prString = ((Enum)pr.PRparseStateEnum).ToString();
-
- return handler + " - " + valueString + ", State " + ((Enum)currentState).ToString() + ", PushState " + prString;
- }
-
- #if _DEBUG
- private static string SerTraceString(string handler, ParseRecord pr, string value, string prefix, string urn, InternalParseStateE currentState, HeaderStateEnum headerState)
- {
- string valueString = "";
- if (value != null)
- valueString = value;
-
- string prString = "";
- if (pr != null)
- prString = ((Enum)pr.PRparseStateEnum).ToString();
-
- return handler + " - name " + valueString + ", prefix " + prefix + ", urn " + urn + ", CuurentState " + ((Enum)currentState).ToString() + ", HeaderState " + ((Enum)headerState).ToString() + ", PushState " + prString;
- }
- #endif
-
-
-
- private void MarshalError(string handler, ParseRecord pr, string value, InternalParseStateE currentState)
- {
- string traceString = SerTraceString(handler, pr, value, currentState, headerState);
- #if _DEBUG
- InternalST.Soap(this, "MarshalError,", traceString);
- #endif
- throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_Syntax"), traceString));
- }
-
-
- internal void Start(XmlTextReader p)
- {
- InternalST.Soap(this, "Start ");
- currentState = InternalParseStateE.Object;
- xmlTextReader = p;
- }
-
-
- internal void StartElement(string prefix, string name, string urn)
- {
- #if _DEBUG
- InternalST.Soap(this, SerTraceString("StartElement Begin ", (ParseRecord)stack.Peek(), name, prefix, urn, currentState, headerState));
- #endif
- string actualName = NameFilter(name);
- string actualPrefix = prefix;
-
- ParseRecord pr = null;
-
- if (!((urn == null) || (urn.Length == 0)) && ((prefix == null) || (prefix.Length == 0))) {
-
- if (nameSpaceToKey.ContainsKey(urn))
- actualPrefix = (string)nameSpaceToKey[urn];
- else {
- actualPrefix = NextPrefix();
- nameSpaceToKey[urn] = actualPrefix;
- }
- InternalST.Soap(this, "StartElement Begin null urn assigned prefix ", actualPrefix);
- }
-
-
- switch (currentState) {
- case InternalParseStateE.Object:
- pr = GetPr();
- pr.PRname = actualName;
- pr.PRnameXmlKey = actualPrefix;
- pr.PRxmlNameSpace = urn;
- pr.PRparseStateEnum = InternalParseStateE.Object;
-
- if ((String.Compare(name, "Array", StringComparison.OrdinalIgnoreCase) == 0) && actualPrefix.Equals(soapKey))
- pr.PRparseTypeEnum = InternalParseTypeE.Object;
- else if (((String.Compare(name, "anyType", StringComparison.OrdinalIgnoreCase) == 0) || (String.Compare(name, "ur-type", StringComparison.OrdinalIgnoreCase) == 0)) && actualPrefix.Equals(xsdKey)) {
- pr.PRname = "System.Object";
- pr.PRnameXmlKey = urtKey;
- pr.PRxmlNameSpace = urn;
- pr.PRparseTypeEnum = InternalParseTypeE.Object;
- }
- else if (String.Compare(urn, "http://schemas.xmlsoap.org/soap/envelope/", StringComparison.OrdinalIgnoreCase) == 0) {
- if (String.Compare(name, "Envelope", StringComparison.OrdinalIgnoreCase) == 0) {
- if (isEnvelope)
- throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_Parser_Envelope"), prefix + ":" + name));
-
- isEnvelope = true;
- pr.PRparseTypeEnum = InternalParseTypeE.Envelope;
- }
- else if (String.Compare(name, "Body", StringComparison.OrdinalIgnoreCase) == 0) {
- if (!isEnvelope)
- throw new SerializationException(SoapUtil.GetResourceString("Serialization_Parser_BodyChild"));
-
- if (isBody)
- throw new SerializationException(SoapUtil.GetResourceString("Serialization_Parser_BodyOnce"));
-
- isBody = true;
- headerState = HeaderStateEnum.None;
- isTopFound = false;
- pr.PRparseTypeEnum = InternalParseTypeE.Body;
- }
- else if (String.Compare(name, "Header", StringComparison.OrdinalIgnoreCase) == 0) {
- if (!isEnvelope)
- throw new SerializationException(SoapUtil.GetResourceString("Serialization_Parser_Header"));
-
- pr.PRparseTypeEnum = InternalParseTypeE.Headers;
- headerState = HeaderStateEnum.FirstHeaderRecord;
- }
- else
- pr.PRparseTypeEnum = InternalParseTypeE.Object;
-
- }
- else {
- pr.PRparseTypeEnum = InternalParseTypeE.Object;
- }
-
- stack.Push(pr);
- break;
- case InternalParseStateE.Member:
-
- pr = GetPr();
-
-
- ParseRecord objectPr = (ParseRecord)stack.Peek();
- pr.PRname = actualName;
- pr.PRnameXmlKey = actualPrefix;
- pr.PRxmlNameSpace = urn;
- pr.PRparseTypeEnum = InternalParseTypeE.Member;
- pr.PRparseStateEnum = InternalParseStateE.Member;
- stack.Push(pr);
- break;
- case InternalParseStateE.MemberChild:
-
- objectPr = (ParseRecord)stack.PeekPeek();
- pr = (ParseRecord)stack.Peek();
- pr.PRmemberValueEnum = InternalMemberValueE.Nested;
- ProcessAttributes(pr, objectPr);
- switch (headerState) {
- case HeaderStateEnum.None:
- case HeaderStateEnum.TopLevelObject:
- InternalST.Soap(this, "ObjectReader.Parse 1");
- objectReader.Parse(pr);
- pr.PRisParsed = true;
- break;
- case HeaderStateEnum.HeaderRecord:
- case HeaderStateEnum.NestedObject:
- ProcessHeaderMember(pr);
- break;
- }
-
- ParseRecord nestPr = GetPr();
- nestPr.PRparseTypeEnum = InternalParseTypeE.Member;
- nestPr.PRparseStateEnum = InternalParseStateE.Member;
- nestPr.PRname = actualName;
- nestPr.PRnameXmlKey = actualPrefix;
- pr.PRxmlNameSpace = urn;
- currentState = InternalParseStateE.Member;
- stack.Push(nestPr);
- break;
- default:
-
- MarshalError("StartElement", (ParseRecord)stack.Peek(), actualName, currentState);
- break;
- }
-
- #if _DEBUG
- InternalST.Soap(this, SerTraceString("StartElement End ", (ParseRecord)stack.Peek(), name, currentState, headerState));
- #endif
- }
-
-
-
- internal void EndElement(string prefix, string name, string urn)
- {
- #if _DEBUG
- InternalST.Soap(this, SerTraceString("EndElement Begin ", (ParseRecord)stack.Peek(), name, prefix, urn, currentState, headerState));
- #endif
-
- string actualName = NameFilter(name);
-
- ParseRecord objectPr = null;
- ParseRecord pr = null;
-
- switch (currentState) {
- case InternalParseStateE.Object:
- pr = (ParseRecord)stack.Pop();
- if (pr.PRparseTypeEnum == InternalParseTypeE.Envelope)
- pr.PRparseTypeEnum = InternalParseTypeE.EnvelopeEnd;
- else if (pr.PRparseTypeEnum == InternalParseTypeE.Body)
- pr.PRparseTypeEnum = InternalParseTypeE.BodyEnd;
- else if (pr.PRparseTypeEnum == InternalParseTypeE.Headers) {
- pr.PRparseTypeEnum = InternalParseTypeE.HeadersEnd;
- headerState = HeaderStateEnum.HeaderRecord;
- }
- else if (pr.PRarrayTypeEnum != InternalArrayTypeE.Base64) {
-
-
-
-
- objectPr = (ParseRecord)stack.Peek();
- InternalST.Soap(this, "SoapParser.EndElement 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.EndElement change position to top");
- }
-
- if (!pr.PRisParsed) {
- InternalST.Soap(this, "SoapParser.EndElement Object hasn't been parsed");
- if (!pr.PRisProcessAttributes && !(pr.PRobjectPositionEnum == InternalObjectPositionE.Top && objectReader.IsFakeTopObject))
- ProcessAttributes(pr, objectPr);
- objectReader.Parse(pr);
- pr.PRisParsed = true;
- }
- pr.PRparseTypeEnum = InternalParseTypeE.ObjectEnd;
- }
-
- switch (headerState) {
- case HeaderStateEnum.None:
- case HeaderStateEnum.TopLevelObject:
- InternalST.Soap(this, "SoapParser.EndElement Parse EndObject");
- objectReader.Parse(pr);
- break;
- case HeaderStateEnum.HeaderRecord:
- case HeaderStateEnum.NestedObject:
- InternalST.Soap(this, "SoapParser.EndElement ProcessHeaderEnd");
- ProcessHeaderEnd(pr);
- break;
- }
-
- if (pr.PRparseTypeEnum == InternalParseTypeE.EnvelopeEnd) {
-
- soapParser.Stop();
- }
-
- PutPr(pr);
- break;
- case InternalParseStateE.Member:
-
- pr = (ParseRecord)stack.Peek();
- objectPr = (ParseRecord)stack.PeekPeek();
- ProcessAttributes(pr, objectPr);
-
-
- if (xmlAttributeList != null)
- InternalST.Soap(this, "XmlAttribute check count ", xmlAttributeList.Count);
- else
- InternalST.Soap(this, "XmlAttribute null");
-
- if ((xmlAttributeList != null) && (xmlAttributeList.Count > 0)) {
- InternalST.Soap(this, "xmlAttribute list count ", xmlAttributeList.Count);
- for (int i = 0; i < xmlAttributeList.Count; i++) {
- InternalST.Soap(this, "ObjectReader.Parse 7");
- objectReader.Parse((ParseRecord)xmlAttributeList[i]);
- }
- xmlAttributeList.Clear();
- }
-
- pr = (ParseRecord)stack.Pop();
- if ((headerState == HeaderStateEnum.TopLevelObject) && (pr.PRarrayTypeEnum == InternalArrayTypeE.Base64)) {
-
-
- InternalST.Soap(this, "ObjectReader.Parse 3");
- objectReader.Parse(pr);
- pr.PRisParsed = true;
- }
- else if (pr.PRmemberValueEnum != InternalMemberValueE.Nested) {
- if ((pr.PRobjectTypeEnum == InternalObjectTypeE.Array) && (pr.PRmemberValueEnum != InternalMemberValueE.Null)) {
-
- pr.PRmemberValueEnum = InternalMemberValueE.Nested;
- InternalST.Soap(this, "ObjectReader.Parse 4");
- objectReader.Parse(pr);
- pr.PRisParsed = true;
-
- pr.PRparseTypeEnum = InternalParseTypeE.MemberEnd;
- }
- else if (pr.PRidRef > 0)
- pr.PRmemberValueEnum = InternalMemberValueE.Reference;
- else if (pr.PRmemberValueEnum != InternalMemberValueE.Null)
- pr.PRmemberValueEnum = InternalMemberValueE.InlineValue;
-
- switch (headerState) {
- case HeaderStateEnum.None:
- case HeaderStateEnum.TopLevelObject:
- InternalST.Soap(this, "ObjectReader.Parse 5");
- if (pr.PRparseTypeEnum == InternalParseTypeE.Object) {
-
- if (!pr.PRisParsed)
- objectReader.Parse(pr);
- pr.PRparseTypeEnum = InternalParseTypeE.ObjectEnd;
- }
- objectReader.Parse(pr);
- pr.PRisParsed = true;
- break;
- case HeaderStateEnum.HeaderRecord:
- case HeaderStateEnum.NestedObject:
- ProcessHeaderMember(pr);
- break;
- }
- }
- else {
-
- pr.PRparseTypeEnum = InternalParseTypeE.MemberEnd;
- switch (headerState) {
- case HeaderStateEnum.None:
- case HeaderStateEnum.TopLevelObject:
- InternalST.Soap(this, "ObjectReader.Parse 6");
- objectReader.Parse(pr);
- pr.PRisParsed = true;
- break;
- case HeaderStateEnum.HeaderRecord:
- case HeaderStateEnum.NestedObject:
- ProcessHeaderMemberEnd(pr);
- break;
- }
- }
- PutPr(pr);
- break;
- case InternalParseStateE.MemberChild:
-
- pr = (ParseRecord)stack.Peek();
- if (pr.PRmemberValueEnum != InternalMemberValueE.Null)
- MarshalError("EndElement", (ParseRecord)stack.Peek(), actualName, currentState);
- break;
- default:
-
- MarshalError("EndElement", (ParseRecord)stack.Peek(), actualName, currentState);
- break;
- }
- #if _DEBUG
- InternalST.Soap(this, SerTraceString("EndElement End ", (ParseRecord)stack.Peek(), name, currentState, headerState));
- #endif
- }
-
-
- 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
- }
-
-
- internal void FinishChildren(string prefix, string name, string urn)
- {
- #if _DEBUG
- InternalST.Soap(this, SerTraceString("FinishChildren Begin ", (ParseRecord)stack.Peek(), name, prefix, urn, currentState, headerState));
- #endif
- ParseRecord pr = null;
-
- switch (currentState) {
- case InternalParseStateE.Member:
- pr = (ParseRecord)stack.Peek();
- currentState = pr.PRparseStateEnum;
-
- pr.PRvalue = textValue;
- textValue = "";
- break;
- case InternalParseStateE.MemberChild:
-
- pr = (ParseRecord)stack.Peek();
- currentState = pr.PRparseStateEnum;
-
- ParseRecord objectPr = (ParseRecord)stack.PeekPeek();
- pr.PRvalue = textValue;
-
- textValue = "";
-
- break;
- case InternalParseStateE.Object:
-
- pr = (ParseRecord)stack.Peek();
- if (pr.PRarrayTypeEnum == InternalArrayTypeE.Base64) {
- pr.PRvalue = textValue;
- textValue = "";
- }
-