/// <summary>
        /// Read Conversations from XML.
        /// </summary>
        /// <param name="reader">The reader.</param>
        /// <param name="xmlElementName">The name of the xml element</param>
        internal override void LoadFromXml(EwsServiceXmlReader reader, string xmlElementName)
        {
            reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, XmlElementNames.UnifiedGroupsSet);

            do
            {
                reader.Read();
                switch (reader.LocalName)
                {
                case XmlElementNames.FilterType:
                    this.FilterType = (UnifiedGroupsFilterType)Enum.Parse(typeof(UnifiedGroupsFilterType), reader.ReadElementValue(), false);
                    break;

                case XmlElementNames.TotalGroups:
                    this.TotalGroups = reader.ReadElementValue <int>();
                    break;

                case XmlElementNames.GroupsTag:
                    reader.Read();
                    while (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.UnifiedGroup))
                    {
                        UnifiedGroup unifiedGroup = new UnifiedGroup();
                        unifiedGroup.LoadFromXml(reader, XmlElementNames.UnifiedGroup);
                        this.unifiedGroups.Add(unifiedGroup);
                    }

                    // Skip end element.
                    reader.EnsureCurrentNodeIsEndElement(XmlNamespace.NotSpecified, XmlElementNames.GroupsTag);
                    reader.Read();
                    break;

                default:
                    break;
                }
            }while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.UnifiedGroupsSet));

            // Skip end element
            reader.EnsureCurrentNodeIsEndElement(XmlNamespace.Types, XmlElementNames.UnifiedGroupsSet);
            reader.Read();
        }
        /// <summary>
        /// Reads response elements from Json.
        /// </summary>
        /// <param name="responseObject">The response object.</param>
        /// <param name="service">The service.</param>
        internal override void LoadFromJson(JsonObject responseObject, ExchangeService service)
        {
            if (responseObject.ContainsKey(XmlElementNames.FilterType))
            {
                this.FilterType = (UnifiedGroupsFilterType)Enum.Parse(typeof(UnifiedGroupsFilterType), responseObject.ReadAsString(XmlElementNames.FilterType), false);
            }

            if (responseObject.ContainsKey(XmlElementNames.TotalGroups))
            {
                this.TotalGroups = responseObject.ReadAsInt(XmlElementNames.TotalGroups);
            }

            if (responseObject.ContainsKey(XmlElementNames.GroupsTag))
            {
                foreach (object unifiedGroup in responseObject.ReadAsArray(XmlElementNames.UnifiedGroup))
                {
                    JsonObject   jsonUnifiedGroup     = unifiedGroup as JsonObject;
                    UnifiedGroup unifiedGroupResponse = new UnifiedGroup();
                    unifiedGroupResponse.LoadFromJson(jsonUnifiedGroup, service);
                    this.unifiedGroups.Add(unifiedGroupResponse);
                }
            }
        }
         /// <summary>
         /// Read Conversations from XML.
         /// </summary>
         /// <param name="reader">The reader.</param>
         /// <param name="xmlElementName">The name of the xml element</param>
         internal override void LoadFromXml(EwsServiceXmlReader reader, string xmlElementName)
         {
             reader.EnsureCurrentNodeIsStartElement(XmlNamespace.Types, XmlElementNames.UnifiedGroupsSet);

             do
             {
                 reader.Read();
                 switch (reader.LocalName)
                 {
                     case XmlElementNames.FilterType:
                         this.FilterType = (UnifiedGroupsFilterType)Enum.Parse(typeof(UnifiedGroupsFilterType), reader.ReadElementValue(), false);
                         break;
                     case XmlElementNames.TotalGroups:
                         this.TotalGroups = reader.ReadElementValue<int>();
                         break;                     
                     case XmlElementNames.GroupsTag:
                         reader.Read();
                         while (reader.IsStartElement(XmlNamespace.Types, XmlElementNames.UnifiedGroup))
                         {
                             UnifiedGroup unifiedGroup = new UnifiedGroup();
                             unifiedGroup.LoadFromXml(reader, XmlElementNames.UnifiedGroup);
                             this.unifiedGroups.Add(unifiedGroup);
                         }
                         
                         // Skip end element.
                         reader.EnsureCurrentNodeIsEndElement(XmlNamespace.NotSpecified, XmlElementNames.GroupsTag);
                         reader.Read();
                         break;
                     default:
                         break;
                 }
             }
             while (!reader.IsEndElement(XmlNamespace.Types, XmlElementNames.UnifiedGroupsSet));

             // Skip end element
             reader.EnsureCurrentNodeIsEndElement(XmlNamespace.Types, XmlElementNames.UnifiedGroupsSet);
             reader.Read();
         }