/// <summary> /// Reads response elements from Json. /// </summary> /// <param name="responseObject">The response object.</param> /// <param name="service">The service.</param> internal override void ReadElementsFromJson(JsonObject responseObject, ExchangeService service) { EwsUtilities.Assert( this.Results.Conversations != null, "FindConversationResponse.ReadElementsFromXml", "conversations is null."); EwsUtilities.Assert( this.Results.HighlightTerms != null, "FindConversationResponse.ReadElementsFromXml", "highlightTerms is null."); foreach (object conversationObject in responseObject.ReadAsArray(XmlElementNames.Conversations)) { JsonObject jsonConversation = conversationObject as JsonObject; Conversation item = EwsUtilities.CreateEwsObjectFromXmlElementName <Conversation>(service, XmlElementNames.Conversation); if (item != null) { item.LoadFromJson( jsonConversation, service, true, null, false); this.Conversations.Add(item); } } Object[] highlightTermObjects = responseObject.ReadAsArray(XmlElementNames.HighlightTerms); if (highlightTermObjects != null) { foreach (object highlightTermObject in highlightTermObjects) { JsonObject jsonHighlightTerm = highlightTermObject as JsonObject; HighlightTerm term = new HighlightTerm(); term.LoadFromJson(jsonHighlightTerm, service); this.Results.HighlightTerms.Add(term); } } if (responseObject.ContainsKey(XmlElementNames.TotalConversationsInView)) { this.Results.TotalCount = responseObject.ReadAsInt(XmlElementNames.TotalConversationsInView); } if (responseObject.ContainsKey(XmlElementNames.IndexedOffset)) { this.Results.IndexedOffset = responseObject.ReadAsInt(XmlElementNames.IndexedOffset); } }
/// <summary> /// Reads response elements from Json. /// </summary> /// <param name="responseObject">The response object.</param> /// <param name="service">The service.</param> internal override void ReadElementsFromJson(JsonObject responseObject, ExchangeService service) { base.ReadElementsFromJson(responseObject, service); JsonObject rootFolder = responseObject.ReadAsJsonObject(XmlElementNames.RootFolder); int totalItemsInView = rootFolder.ReadAsInt(XmlAttributeNames.TotalItemsInView); bool moreItemsAvailable = !rootFolder.ReadAsBool(XmlAttributeNames.IncludesLastItemInRange); // Ignore IndexedPagingOffset attribute if moreItemsAvailable is false. int?nextPageOffset = null; if (moreItemsAvailable) { if (rootFolder.ContainsKey(XmlAttributeNames.IndexedPagingOffset)) { nextPageOffset = rootFolder.ReadAsInt(XmlAttributeNames.IndexedPagingOffset); } } if (!this.isGrouped) { this.results = new FindItemsResults <TItem>(); this.results.TotalCount = totalItemsInView; this.results.NextPageOffset = nextPageOffset; this.results.MoreAvailable = moreItemsAvailable; this.InternalReadItemsFromJson( rootFolder, this.propertySet, service, this.results.Items); } else { this.groupedFindResults = new GroupedFindItemsResults <TItem>(); this.groupedFindResults.TotalCount = totalItemsInView; this.groupedFindResults.NextPageOffset = nextPageOffset; this.groupedFindResults.MoreAvailable = moreItemsAvailable; if (rootFolder.ContainsKey(XmlElementNames.Groups)) { object[] jsGroups = rootFolder.ReadAsArray(XmlElementNames.Groups); foreach (JsonObject jsGroup in jsGroups.OfType <JsonObject>()) { if (jsGroup.ContainsKey(XmlElementNames.GroupedItems)) { JsonObject jsGroupedItems = jsGroup.ReadAsJsonObject(XmlElementNames.GroupedItems); string groupIndex = jsGroupedItems.ReadAsString(XmlElementNames.GroupIndex); List <TItem> itemList = new List <TItem>(); this.InternalReadItemsFromJson( jsGroupedItems, this.propertySet, service, itemList); this.groupedFindResults.ItemGroups.Add(new ItemGroup <TItem>(groupIndex, itemList)); } } } } Object[] highlightTermObjects = responseObject.ReadAsArray(XmlElementNames.HighlightTerms); if (highlightTermObjects != null) { foreach (object highlightTermObject in highlightTermObjects) { JsonObject jsonHighlightTerm = highlightTermObject as JsonObject; HighlightTerm term = new HighlightTerm(); term.LoadFromJson(jsonHighlightTerm, service); this.results.HighlightTerms.Add(term); } } }