/// <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);
    }