c# - 如何在不丢失任何数据的情况下序列化和反序列化异常对象?

标签 c# .net exception serialization system.reflection

我正在尝试序列化异常对象并将其存储到文件中,然后通过反序列化将其取回。

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工具 Iserializablecontrols how it get serialized .

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

关于c# - 如何在不丢失任何数据的情况下序列化和反序列化异常对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40999625/

相关文章:

c# - 为 FX Cop 生成代码属性

c# 数据源正在返回 System.Data.DataRowView

.net - WPF 的 F# 异步事件处理程序类似于 C# 的 async 和 await

.net - 找不到类型 'xxx.xxx.xxx' 。请确保装配

php - Laravel:创建了新的 Eloquent 模型,但 Laravel 无法识别它

java - 找不到符号,如何编写自定义异常类

ruby-on-rails - 在 Rails 中处理异常和错误的最佳策略是什么?

c# - 如何传递可选参数

c# - 使用 Json.NET 测试嵌套键?

c# - 有没有更好的方法来处理转换异常?