public static FastXmlTransportMessageSerializerResult Deserialize(Stream inputStream)
        {
            var result = new FastXmlTransportMessageSerializerResult();

            using (var reader = new XmlTextReader(inputStream))
            {
                reader.WhitespaceHandling = WhitespaceHandling.None;
                reader.Read(); // read <root>
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        var elementName = reader.Name;
                        reader.Read(); // read the child;
                        while (reader.NodeType == XmlNodeType.Element)
                        {
                            // likely an empty header element node
                            result.Headers.Add(elementName, reader.Value);

                            elementName = reader.Name;
                            reader.Read(); // read the child;
                        }
                        if (string.Equals(elementName, BodyElementName, StringComparison.InvariantCultureIgnoreCase) && reader.NodeType == XmlNodeType.CDATA)
                        {
                            result.Body = reader.Value;
                        }
                        else if (reader.NodeType == XmlNodeType.Text)
                        {
                            result.Headers.Add(elementName, reader.Value);
                        }
                    }
                }
            }
            return(result);
        }
        public static FastXmlTransportMessageSerializerResult Deserialize(Stream inputStream)
        {
            var result = new FastXmlTransportMessageSerializerResult();
            using (var reader = new XmlTextReader(inputStream))
            {
                reader.WhitespaceHandling = WhitespaceHandling.None;
                reader.Read(); // read <root>
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.Element)
                    {
                        var elementName = reader.Name;
                        reader.Read(); // read the child;
                        while (reader.NodeType == XmlNodeType.Element)
                        {
                            // likely an empty header element node
                            result.Headers.Add(elementName, reader.Value);

                            elementName = reader.Name;
                            reader.Read(); // read the child;
                        }
                        if (string.Equals(elementName, BodyElementName, StringComparison.InvariantCultureIgnoreCase) && reader.NodeType == XmlNodeType.CDATA)
                        {
                            result.Body = reader.Value;
                        }
                        else if (reader.NodeType == XmlNodeType.Text)
                        {
                            result.Headers.Add(elementName, reader.Value);
                        }
                    }
                }
            }
            return result;
        }