【问题标题】:"There was an error reflecting type" in C#C# 中的“存在错误反映类型”
【发布时间】:2011-06-16 03:07:08
【问题描述】:

我需要序列化和异常,我创建了一个可序列化的类

[Serializable]
public class MessageException : Exception
{
    public string Exception
    { get; set; }
    public MessageException()
    { }
    public MessageException(System.Exception ex) 
    {
        this.Exception = ex.Message.ToString();
    }
}

当它发生时,我尝试从以下异常中调用该类

catch (Exception ex)
        {
            MessageException exception = new MessageException(ex);
            var exSerializer = new XmlSerializer(typeof(MessageException));


            var writer = new StringWriter();
            exSerializer.Serialize(writer, exception);
            writer.Close();
            Compair2Files(writer.ToString(), BaseString);
        }

它在第二行失败“var exSerializer = new XmlSerializer(typeof(MessageException));”

我真正想要做的是,当我捕捉到我想要序列化的异常,然后将它存储到我的单元测试程序的文件中。 你能帮我吗 提前致谢 日

【问题讨论】:

标签: c# .net exception serialization


【解决方案1】:

您不能使用XmlSerializer 序列化异常。
你需要使用二进制序列化。

基础Exception 类已经是[Serializale],所以你的类没用了。
这也是错误的;你忽略了堆栈跟踪。

【讨论】:

  • 现在我的问题是,如果我使用二进制我需要使用流,可以将流存储到字符串而不是文件中吗?意思是流流=(这里可以让我将它存储到字符串中)我可以使用 Memorystream 吗??
  • 没有。无法将异常序列化为字符串。相反,您可以直接调用ex.ToString(),它会返回相关信息。
  • 可以使用MemoryStream将二进制数据存储在内存中。
  • 这里是我的代码:now catch (Exception ex) { MemoryStream mStream = new MemoryStream(); BinaryFormatter bFormatter = new BinaryFormatter(); bFormatter.Serialize(mStream, ex); Compair2Files(mStream.ToString(), BaseString); } 得到一个错误,说 SerializationException 未处理,任何想法
  • 另外,mStream.ToString() 毫无意义。没有办法获得人类可读的字符串。
猜你喜欢
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
相关资源
最近更新 更多