object[] flatLists = null;
object[] flatListsChoices = null;
Fixup fixup = null;
- int ind = 0;
+ int ind = -1;
int maxInd;
if (readBySoapOrder) {
if (map.ElementMembers != null) maxInd = map.ElementMembers.Count;
- else maxInd = 0;
+ else maxInd = -1;
}
else
maxInd = int.MaxValue;
AddFixup (fixup);
}
- while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && (ind < maxInd))
+ XmlTypeMapMember previousMember = null;
+ while (Reader.NodeType != System.Xml.XmlNodeType.EndElement && (ind < maxInd - 1))
{
if (Reader.NodeType == System.Xml.XmlNodeType.Element)
{
XmlTypeMapElementInfo info;
if (readBySoapOrder) {
- info = map.GetElement (ind++);
+ info = map.GetElement (Reader.LocalName, Reader.NamespaceURI);
}
else if (hasAnyReturnMember) {
info = (XmlTypeMapElementInfo) ((XmlTypeMapMemberElement)map.ReturnMember).ElementInfo[0];
}
else {
if (map.IsOrderDependentMap) {
- while ((info = map.GetElement (ind++)) != null)
- if (info.ElementName == Reader.LocalName && info.Namespace == Reader.NamespaceURI)
- break;
+ info = map.GetElement (Reader.LocalName, Reader.NamespaceURI);
}
else
info = map.GetElement (Reader.LocalName, Reader.NamespaceURI, -1);
if (info != null && !readFlag[info.Member.Index] )
{
+ if (info.Member != previousMember)
+ {
+ ind++;
+ previousMember = info.Member;
+ }
+
+ if (readBySoapOrder && info.ExplicitOrder != ind)
+ throw new InvalidOperationException(string.Format("Element '{0}' has wrong order in sequence (expected - {1}, actual - {2}", Reader.LocalName, info.ExplicitOrder, ind));
+
+
if (info.Member.GetType() == typeof (XmlTypeMapMemberList))
{
if (_format == SerializationFormat.Encoded && info.MultiReferenceType)
if (_elements == null) return null;
return (XmlTypeMapElementInfo)_elements [BuildKey (name,ns, order)];
}
+
+ public XmlTypeMapElementInfo GetElement(string name, string ns)
+ {
+ if (_elements == null) return null;
+
+ foreach (XmlTypeMapElementInfo info in _elements.Values)
+ if (info.ElementName == name && info.Namespace == ns)
+ return info;
+
+ return null;
+ }
public XmlTypeMapElementInfo GetElement (int index)
{