/// <summary> /// Reads response elements from XML. /// </summary> /// <param name="reader">The reader.</param> internal override void ReadElementsFromXml(EwsServiceXmlReader reader) { reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.RootFolder); this.results.TotalCount = reader.ReadAttributeValue <int>(XmlAttributeNames.TotalItemsInView); this.results.MoreAvailable = !reader.ReadAttributeValue <bool>(XmlAttributeNames.IncludesLastItemInRange); // Ignore IndexedPagingOffset attribute if MoreAvailable is false. this.results.NextPageOffset = results.MoreAvailable ? reader.ReadNullableAttributeValue <int>(XmlAttributeNames.IndexedPagingOffset) : null; reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.Folders); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.NodeType == XmlNodeType.Element) { Folder folder = EwsUtilities.CreateEwsObjectFromXmlElementName <Folder>(reader.Service, reader.LocalName); if (folder == null) { reader.SkipCurrentElement(); } else { folder.LoadFromXml( reader, true, /* clearPropertyBag */ this.propertySet, true /* summaryPropertiesOnly */); this.results.Folders.Add(folder); } } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Folders)); } reader.ReadEndElement(XmlNamespace.Messages, XmlElementNames.RootFolder); }
/// <summary> /// Reads response elements from XML. /// </summary> /// <param name="reader">The reader.</param> internal override void ReadElementsFromXml(EwsServiceXmlReader reader) { reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.RootFolder); int totalItemsInView = reader.ReadAttributeValue <int>(XmlAttributeNames.TotalItemsInView); bool moreItemsAvailable = !reader.ReadAttributeValue <bool>(XmlAttributeNames.IncludesLastItemInRange); // Ignore IndexedPagingOffset attribute if moreItemsAvailable is false. int?nextPageOffset = moreItemsAvailable ? reader.ReadNullableAttributeValue <int>(XmlAttributeNames.IndexedPagingOffset) : null; if (!this.isGrouped) { this.results = new FindItemsResults <TItem>(); this.results.TotalCount = totalItemsInView; this.results.NextPageOffset = nextPageOffset; this.results.MoreAvailable = moreItemsAvailable; InternalReadItemsFromXml( reader, this.propertySet, this.results.Items); } else { this.groupedFindResults = new GroupedFindItemsResults <TItem>(); this.groupedFindResults.TotalCount = totalItemsInView; this.groupedFindResults.NextPageOffset = nextPageOffset; this.groupedFindResults.MoreAvailable = moreItemsAvailable; reader.ReadStartElement(XmlNamespace.Types, XmlElementNames.Groups); if (!reader.IsEmptyElement) { do { reader.Read(); if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.GroupedItems)) { string groupIndex = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.GroupIndex); List <TItem> itemList = new List <TItem>(); InternalReadItemsFromXml( reader, this.propertySet, itemList); reader.ReadEndElement(XmlNamespace.Types, XmlElementNames.GroupedItems); this.groupedFindResults.ItemGroups.Add(new ItemGroup <TItem>(groupIndex, itemList)); } }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Groups)); } } reader.ReadEndElement(XmlNamespace.Messages, XmlElementNames.RootFolder); reader.Read(); if (reader.IsStartElement(XmlNamespace.Messages, XmlElementNames.HighlightTerms) && !reader.IsEmptyElement) { do { reader.Read(); if (reader.NodeType == XmlNodeType.Element) { HighlightTerm term = new HighlightTerm(); term.LoadFromXml( reader, XmlNamespace.Types, XmlElementNames.HighlightTerm); this.results.HighlightTerms.Add(term); } }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.HighlightTerms)); } }