【问题标题】:C# convert Exception Object to an XML documentC# 将异常对象转换为 XML 文档
【发布时间】: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);
}

【问题讨论】:

标签: c# xml


【解决方案1】:

您正在寻找的是 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();
        }
    }

【讨论】:

    【解决方案2】:

    按照@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());
        }
    }
    

    【讨论】:

      【解决方案3】:

      使用 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);
              }
      

      【讨论】:

        猜你喜欢
        • 2015-10-06
        • 1970-01-01
        • 1970-01-01
        • 2013-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多