protected static void AddExceptionToTraceString(XmlWriter xml, Exception exception) { xml.WriteElementString("ExceptionType", DiagnosticTraceBase.XmlEncode(exception.GetType().AssemblyQualifiedName)); xml.WriteElementString("Message", DiagnosticTraceBase.XmlEncode(exception.Message)); xml.WriteElementString("StackTrace", DiagnosticTraceBase.XmlEncode(DiagnosticTraceBase.StackTraceString(exception))); xml.WriteElementString("ExceptionString", DiagnosticTraceBase.XmlEncode(exception.ToString())); Win32Exception win32Exception = exception as Win32Exception; if (win32Exception != null) { int nativeErrorCode = win32Exception.NativeErrorCode; xml.WriteElementString("NativeErrorCode", nativeErrorCode.ToString("X", CultureInfo.InvariantCulture)); } if (exception.Data != null && exception.Data.Count > 0) { xml.WriteStartElement("DataItems"); foreach (object key in exception.Data.Keys) { xml.WriteStartElement("Data"); xml.WriteElementString("Key", DiagnosticTraceBase.XmlEncode(key.ToString())); xml.WriteElementString("Value", DiagnosticTraceBase.XmlEncode(exception.Data[key].ToString())); xml.WriteEndElement(); } xml.WriteEndElement(); } if (exception.InnerException != null) { xml.WriteStartElement("InnerException"); DiagnosticTraceBase.AddExceptionToTraceString(xml, exception.InnerException); xml.WriteEndElement(); } }