/// <summary>
        /// Initializes a new instance.
        /// </summary>
        /// <param name="innerException"></param>
        public SDataException(WebException innerException)
            : base(innerException.Message, innerException, innerException.Status, innerException.Response)
        {
            if (Response == null)
            {
                return;
            }

            var httpResponse = Response as HttpWebResponse;
            _statusCode = httpResponse != null ? httpResponse.StatusCode : (HttpStatusCode?) null;
            MediaType mediaType;

            if (MediaTypeNames.TryGetMediaType(Response.ContentType, out mediaType) && mediaType == MediaType.Xml)
            {
                using (var memoryStream = new MemoryStream())
                {
                    using (var responseStream = Response.GetResponseStream())
                    {
                        responseStream.CopyTo(memoryStream);
                    }

                    memoryStream.Seek(0, SeekOrigin.Begin);
                    _diagnoses = memoryStream.DeserializeXml<Diagnoses>();

                    if (_diagnoses == null)
                    {
                        memoryStream.Seek(0, SeekOrigin.Begin);
                        var diagnosis = memoryStream.DeserializeXml<Diagnosis>();

                        if (diagnosis != null)
                        {
                            _diagnoses = new Collection<Diagnosis> {diagnosis};
                        }
                    }
                }
            }
        }
        private static object LoadXmlContent(Stream stream, HttpStatusCode? statusCode)
        {
            using (var memory = new MemoryStream())
            {
                stream.CopyTo(memory);

                memory.Seek(0, SeekOrigin.Begin);
                var tracking = memory.DeserializeXml<Tracking>();
                if (tracking != null)
                {
                    return tracking;
                }

                memory.Seek(0, SeekOrigin.Begin);
                var diagnoses = memory.DeserializeXml<Diagnoses>();
                if (diagnoses != null)
                {
                    if (statusCode != null)
                    {
                        throw new SDataException(diagnoses, statusCode.Value);
                    }
                    return diagnoses;
                }

                memory.Seek(0, SeekOrigin.Begin);
                var diagnosis = memory.DeserializeXml<Diagnosis>();
                if (diagnosis != null)
                {
                    if (statusCode != null)
                    {
                        throw new SDataException(new Collection<Diagnosis> {diagnosis}, statusCode.Value);
                    }
                    return diagnosis;
                }

                memory.Seek(0, SeekOrigin.Begin);
                return LoadStringContent(memory);
            }
        }