如何序列化&在没有任何数据丢失的情况下反序列化异常对象?

时间:2016-12-06 15:59:04

标签: c# .net exception serialization system.reflection

我正在尝试将Exception对象序列化并存储到文件中,然后通过反序列化将其检索回来。

File.Delete(_FilePath);
using (Stream stream = File.Open(_FilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
    new BinaryFormatter().Serialize(stream, originalException);
}

using (Stream stream = File.Open(_FilePath, FileMode.Open, FileAccess.Read))
{
     Exception deserializedException = (Exception)(new BinaryFormatter().Deserialize(stream));
   // deserializedException.TargetSite is null!!!
}

但是,反序列化的Exception对象的TargetSite属性为null。也就是说,它没有被序列化,因此它也没有被反序列化。 TargetSite属性的类型为MethodBase。 (序列化MethodBase没有意义IMO)

有没有其他方法可以存储和检索完整的Exception对象而不会丢失任何数据?

1 个答案:

答案 0 :(得分:1)

Exception实施Iserializablecontrols how it get serialized

您可以从异常中继承并覆盖GetObjectData。不要忘记将Serailizable属性添加到派生类。