我正在使用 BinaryFormatter 序列化和反序列化一些对象。这些对象的结构如下:
[Serializable()]
public class SerializableObject : ISerializable
{
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("SomeProperty", SomeProperty);
// similar for other properties
}
public SerializableObject(SerializationInfo info, StreamingContext context)
{
this.SomeProperty = (SomePropertyClass)info.GetValue("SomeProperty", typeof(SomePropertyClass));
// similar for other properties
}
}
我注意到,当我尝试反序列化对象时,如果找不到“SomeProperty”条目(例如,因为它被重命名或删除),则会引发 TargetInvocation 异常。由于我打算将来更改 SerializableObject 类的属性,所以我正在考虑捕获异常并将有问题的属性的值设置为某个默认值,而不是让我的应用程序崩溃,如下所示:
public SerializableObject(SerializationInfo info, StreamingContext context)
{
try
{
this.SomeProperty = (SomePropertyClass)info.GetValue("SomeProperty", typeof(SomePropertyClass));
}
catch (TargetInvocationException)
{
this.SomeProperty = SomePropertyClass.DefaultValue;
}
}
众所周知,捕获你不知道如何或无法处理的异常是一种不好的做法,所以我想问在这个地方捕获它是否安全?是否可以出于任何其他原因引发相同的异常(我不知道因此不应该处理)?