【发布时间】:2017-05-27 21:57:57
【问题描述】:
我希望能够创建一个 XML 文档以从 Exception 对象保存到 SQL 数据库。有没有办法轻松地将异常对象转换为 XML 文档?我希望能够做类似的事情:
public void WriteError(Exception ex)
{
var doc = new XmlDocument();
doc.Load(ex);
sql.Insert(doc);
}
【问题讨论】:
我希望能够创建一个 XML 文档以从 Exception 对象保存到 SQL 数据库。有没有办法轻松地将异常对象转换为 XML 文档?我希望能够做类似的事情:
public void WriteError(Exception ex)
{
var doc = new XmlDocument();
doc.Load(ex);
sql.Insert(doc);
}
【问题讨论】:
您正在寻找的是 XmlSerializer。序列化正在变为字符串,XmlSerializer 更进一步。我使用了将生成的 XML 写入文件的扩展方法,但您可以根据自己的需要对其进行调整:
public static void WriteToXmlFile<T>(string filePath, T objectToWrite, bool append = false) where T : new()
{
TextWriter writer = null;
try
{
var serializer = new XmlSerializer(typeof(T));
writer = new StreamWriter(filePath, append);
serializer.Serialize(writer, objectToWrite);
}
finally
{
if (writer != null)
writer.Close();
}
}
【讨论】:
按照@Forklift 的建议,以下是使用XmlSerializer 的方法:
public void WriteError(Exception ex)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Exception));
using (var memoryStream = new MemoryStream()) {
xmlSerializer.Serialize(memoryStream, ex);
var streamReader = new StreamReader(memoryStream);
sql.Insert(streamReader.ReadToEnd());
}
}
【讨论】:
使用 xml linq:
public static void WriteError(Exception ex)
{
XDocument doc = new XDocument("Error", new object[] {
new XElement("message", ex.Message),
new XElement("stacktrace", ex.StackTrace),
new XElement("helplink", ex.HelpLink)
});
sql.Insert(doc);
}
【讨论】: