private static string Serialize(object[] pagingElements, out int pageNumber)
 {
     pageNumber = 0;
     if (pagingElements == null || pagingElements.Length == 0)
     {
         return((string)null);
     }
     if (pagingElements.Length % 3 != 1)
     {
         throw new NotSupportedException("Skip token has incorrect length");
     }
     if (pagingElements[0] == null || !(pagingElements[0].GetType() == typeof(int)) || (int)pagingElements[0] < 0)
     {
         throw new NotSupportedException("Skip token has incorrect page value");
     }
     pageNumber = (int)pagingElements[0];
     using (StringWriter stringWriter = new StringWriter((IFormatProvider)CultureInfo.InvariantCulture))
     {
         using (XmlWriter xmlWriter = PagingCookieHelper.CreateXmlWriter((TextWriter)stringWriter))
         {
             xmlWriter.WriteStartElement("cookie");
             xmlWriter.WriteAttributeString("page", pageNumber.ToString((IFormatProvider)CultureInfo.InvariantCulture));
             int num = 1;
             if (pagingElements[1] != null && pagingElements[1].GetType() == typeof(Guid) && (pagingElements[2] != null && pagingElements[2].GetType() == typeof(string)) && (pagingElements[3] != null && pagingElements[3].GetType() == typeof(int)))
             {
                 num = 4;
                 xmlWriter.WriteAttributeString("parentEntityId", pagingElements[1].ToString());
                 xmlWriter.WriteAttributeString("parentAttributeName", (string)pagingElements[2]);
                 xmlWriter.WriteAttributeString("parentEntityObjectTypeCode", pagingElements[3].ToString());
             }
             for (int index = num; index < pagingElements.Length; index += 3)
             {
                 string pagingElement = (string)pagingElements[index];
                 ClientExceptionHelper.ThrowIfNullOrEmpty(pagingElement, "attributeName");
                 string empty1 = string.Empty;
                 string empty2 = string.Empty;
                 string str1   = (string)pagingElements[index + 1];
                 string str2   = (string)pagingElements[index + 2];
                 xmlWriter.WriteStartElement(pagingElement);
                 string localName1;
                 if (str1 != null)
                 {
                     localName1 = "last";
                 }
                 else
                 {
                     localName1 = "lastnull";
                     str1       = "1";
                 }
                 string localName2;
                 if (str2 != null)
                 {
                     localName2 = "first";
                 }
                 else
                 {
                     localName2 = "firstnull";
                     str2       = "1";
                 }
                 xmlWriter.WriteAttributeString(localName1, str1);
                 xmlWriter.WriteAttributeString(localName2, str2);
                 xmlWriter.WriteEndElement();
             }
             xmlWriter.WriteEndElement();
         }
         return(stringWriter.ToString());
     }
 }