public IRequest Marshall(CreateInvalidationRequest createInvalidationRequest)
        {
            IRequest request = new DefaultRequest(createInvalidationRequest, "AmazonCloudFront");



            request.HttpMethod = "POST";

            string uriResourcePath = "2013-05-12/distribution/{DistributionId}/invalidation";

            uriResourcePath = uriResourcePath.Replace("{DistributionId}", createInvalidationRequest.DistributionId ?? "");

            if (uriResourcePath.Contains("?"))
            {
                string queryString = uriResourcePath.Substring(uriResourcePath.IndexOf("?") + 1);
                uriResourcePath = uriResourcePath.Substring(0, uriResourcePath.IndexOf("?"));

                foreach (string s in queryString.Split('&', ';'))
                {
                    string[] nameValuePair = s.Split('=');
                    if (nameValuePair.Length == 2 && nameValuePair[1].Length > 0)
                    {
                        request.Parameters.Add(nameValuePair[0], nameValuePair[1]);
                    }
                    else
                    {
                        request.Parameters.Add(nameValuePair[0], null);
                    }
                }
            }

            request.ResourcePath = uriResourcePath;


            StringWriter  stringWriter = new StringWriter();
            XmlTextWriter xmlWriter    = new XmlTextWriter(stringWriter);

            xmlWriter.Namespaces = true;

            if (createInvalidationRequest != null)
            {
                InvalidationBatch invalidationBatchInvalidationBatch = createInvalidationRequest.InvalidationBatch;
                if (invalidationBatchInvalidationBatch != null)
                {
                    xmlWriter.WriteStartElement("InvalidationBatch", "http://cloudfront.amazonaws.com/doc/2013-05-12/");
                    if (invalidationBatchInvalidationBatch != null)
                    {
                        Paths pathsPaths = invalidationBatchInvalidationBatch.Paths;
                        if (pathsPaths != null)
                        {
                            xmlWriter.WriteStartElement("Paths", "http://cloudfront.amazonaws.com/doc/2013-05-12/");
                            if (pathsPaths.IsSetQuantity())
                            {
                                xmlWriter.WriteElementString("Quantity", "http://cloudfront.amazonaws.com/doc/2013-05-12/", pathsPaths.Quantity.ToString());
                            }

                            if (pathsPaths != null)
                            {
                                List <string> pathsPathsitemsList = pathsPaths.Items;
                                if (pathsPathsitemsList != null && pathsPathsitemsList.Count > 0)
                                {
                                    int pathsPathsitemsListIndex = 1;
                                    xmlWriter.WriteStartElement("Items", "http://cloudfront.amazonaws.com/doc/2013-05-12/");
                                    foreach (string pathsPathsitemsListValue in pathsPathsitemsList)
                                    {
                                        xmlWriter.WriteStartElement("Path", "http://cloudfront.amazonaws.com/doc/2013-05-12/");
                                        xmlWriter.WriteValue(pathsPathsitemsListValue);
                                        xmlWriter.WriteEndElement();


                                        pathsPathsitemsListIndex++;
                                    }
                                    xmlWriter.WriteEndElement();
                                }
                            }
                            xmlWriter.WriteEndElement();
                        }
                    }
                    if (invalidationBatchInvalidationBatch.IsSetCallerReference())
                    {
                        xmlWriter.WriteElementString("CallerReference", "http://cloudfront.amazonaws.com/doc/2013-05-12/", invalidationBatchInvalidationBatch.CallerReference.ToString());
                    }
                    xmlWriter.WriteEndElement();
                }
            }


            try
            {
                request.Content = System.Text.Encoding.UTF8.GetBytes(stringWriter.ToString());
                request.Headers.Add("Content-Type", "application/xml");
            }
            catch (EncoderFallbackException e)
            {
                throw new AmazonServiceException("Unable to marshall request to XML", e);
            }


            return(request);
        }
        public IRequest Marshall(CreateInvalidationRequest createInvalidationRequest)
        {
            IRequest request = new DefaultRequest(createInvalidationRequest, "AmazonCloudFront");



            request.HttpMethod = "POST";
            string uriResourcePath = "2014-01-31/distribution/{DistributionId}/invalidation";

            uriResourcePath      = uriResourcePath.Replace("{DistributionId}", createInvalidationRequest.IsSetDistributionId() ? createInvalidationRequest.DistributionId.ToString() : "");
            request.ResourcePath = uriResourcePath;


            StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture);

            using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, new XmlWriterSettings()
            {
                Encoding = System.Text.Encoding.UTF8, OmitXmlDeclaration = true
            }))
            {
                if (createInvalidationRequest != null)
                {
                    InvalidationBatch invalidationBatchInvalidationBatch = createInvalidationRequest.InvalidationBatch;
                    if (invalidationBatchInvalidationBatch != null)
                    {
                        xmlWriter.WriteStartElement("InvalidationBatch", "http://cloudfront.amazonaws.com/doc/2014-01-31/");
                        if (invalidationBatchInvalidationBatch != null)
                        {
                            Paths pathsPaths = invalidationBatchInvalidationBatch.Paths;
                            if (pathsPaths != null)
                            {
                                xmlWriter.WriteStartElement("Paths", "http://cloudfront.amazonaws.com/doc/2014-01-31/");
                                if (pathsPaths.IsSetQuantity())
                                {
                                    xmlWriter.WriteElementString("Quantity", "http://cloudfront.amazonaws.com/doc/2014-01-31/", pathsPaths.Quantity.ToString(CultureInfo.InvariantCulture));
                                }

                                if (pathsPaths != null)
                                {
                                    List <string> pathsPathsitemsList = pathsPaths.Items;
                                    if (pathsPathsitemsList != null && pathsPathsitemsList.Count > 0)
                                    {
                                        int pathsPathsitemsListIndex = 1;
                                        xmlWriter.WriteStartElement("Items", "http://cloudfront.amazonaws.com/doc/2014-01-31/");
                                        foreach (string pathsPathsitemsListValue in pathsPathsitemsList)
                                        {
                                            xmlWriter.WriteStartElement("Path", "http://cloudfront.amazonaws.com/doc/2014-01-31/");
                                            xmlWriter.WriteValue(pathsPathsitemsListValue);
                                            xmlWriter.WriteEndElement();


                                            pathsPathsitemsListIndex++;
                                        }
                                        xmlWriter.WriteEndElement();
                                    }
                                }
                                xmlWriter.WriteEndElement();
                            }
                        }
                        if (invalidationBatchInvalidationBatch.IsSetCallerReference())
                        {
                            xmlWriter.WriteElementString("CallerReference", "http://cloudfront.amazonaws.com/doc/2014-01-31/", invalidationBatchInvalidationBatch.CallerReference.ToString(CultureInfo.InvariantCulture));
                        }
                        xmlWriter.WriteEndElement();
                    }
                }
            }
            try
            {
                string content = stringWriter.ToString();
                request.Content = System.Text.Encoding.UTF8.GetBytes(content);
                request.Headers["Content-Type"] = "application/xml";
            }
            catch (EncoderFallbackException e)
            {
                throw new AmazonServiceException("Unable to marshall request to XML", e);
            }


            return(request);
        }