/// <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); } }