/// <summary>
    /// Load from xml
    /// </summary>
    /// <param name="reader">The reader</param>
    /// <returns>Non indexable item details result object</returns>
    static NonIndexableItemDetailsResult LoadFromXml(EwsServiceXmlReader reader)
    {
        NonIndexableItemDetailsResult nonIndexableItemDetailsResult = new NonIndexableItemDetailsResult();

        reader.ReadStartElement(XmlNamespace.Messages, XmlElementNames.NonIndexableItemDetailsResult);

        do
        {
            reader.Read();

            if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.Items))
            {
                List <NonIndexableItem> nonIndexableItems = new List <NonIndexableItem>();
                if (!reader.IsEmptyElement)
                {
                    do
                    {
                        reader.Read();
                        NonIndexableItem nonIndexableItem = NonIndexableItem.LoadFromXml(reader);
                        if (nonIndexableItem != null)
                        {
                            nonIndexableItems.Add(nonIndexableItem);
                        }
                    }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.Items));

                    nonIndexableItemDetailsResult.Items = nonIndexableItems.ToArray();
                }
            }

            if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.FailedMailboxes))
            {
                nonIndexableItemDetailsResult.FailedMailboxes = FailedSearchMailbox.LoadFailedMailboxesXml(XmlNamespace.Types, reader);
            }
        }while (!reader.IsEndElement(XmlNamespace.Messages, XmlElementNames.NonIndexableItemDetailsResult));

        return(nonIndexableItemDetailsResult);
    }
    /// <summary>
    /// Load from xml
    /// </summary>
    /// <param name="reader">The reader</param>
    /// <returns>Non indexable item object</returns>
    static NonIndexableItem LoadFromXml(EwsServiceXmlReader reader)
    {
        NonIndexableItem result = null;

        if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.NonIndexableItemDetail))
        {
            ItemId         itemId             = null;
            ItemIndexError errorCode          = ItemIndexError.None;
            String         errorDescription   = null;
            bool           isPartiallyIndexed = false;
            bool           isPermanentFailure = false;
            int            attemptCount       = 0;
            DateTime?      lastAttemptTime    = null;
            String         additionalInfo     = null;
            String         sortValue          = null;

            do
            {
                reader.Read();
                if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ItemId))
                {
                    itemId = new ItemId();
                    itemId.ReadAttributesFromXml(reader);
                }
                else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.ErrorDescription))
                {
                    errorDescription = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.ErrorDescription);
                }
                else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.IsPartiallyIndexed))
                {
                    isPartiallyIndexed = reader.ReadElementValue <bool>(XmlNamespace.Types, XmlElementNames.IsPartiallyIndexed);
                }
                else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.IsPermanentFailure))
                {
                    isPermanentFailure = reader.ReadElementValue <bool>(XmlNamespace.Types, XmlElementNames.IsPermanentFailure);
                }
                else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.AttemptCount))
                {
                    attemptCount = reader.ReadElementValue <int>(XmlNamespace.Types, XmlElementNames.AttemptCount);
                }
                else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.LastAttemptTime))
                {
                    lastAttemptTime = reader.ReadElementValue <DateTime>(XmlNamespace.Types, XmlElementNames.LastAttemptTime);
                }
                else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.AdditionalInfo))
                {
                    additionalInfo = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.AdditionalInfo);
                }
                else if (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.SortValue))
                {
                    sortValue = reader.ReadElementValue(XmlNamespace.Types, XmlElementNames.SortValue);
                }
            }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.NonIndexableItemDetail));

            result = new NonIndexableItem
            {
                ItemId             = itemId,
                ErrorCode          = errorCode,
                ErrorDescription   = errorDescription,
                IsPartiallyIndexed = isPartiallyIndexed,
                IsPermanentFailure = isPermanentFailure,
                AttemptCount       = attemptCount,
                LastAttemptTime    = lastAttemptTime,
                AdditionalInfo     = additionalInfo,
                SortValue          = sortValue,
            };
        }

        return(result);
    }