Я использую 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
}
}
Я заметил, что при попытке десериализации объекта выдается исключение TargetInvocation, если запись «SomeProperty» не может быть найдена (например, потому что онабыл переименован или удален).Поскольку в будущем я намереваюсь изменить свойства класса SerializableObject, я думал о том, чтобы перехватить исключение и установить для значения проблемного свойства какое-то значение по умолчанию вместо сбоя приложения, например:
public SerializableObject(SerializationInfo info, StreamingContext context)
{
try
{
this.SomeProperty = (SomePropertyClass)info.GetValue("SomeProperty", typeof(SomePropertyClass));
}
catch (TargetInvocationException)
{
this.SomeProperty = SomePropertyClass.DefaultValue;
}
}
Как мы все знаем, ловить исключения, которые вы не знаете или не можете обработать, является плохой практикой, поэтому я спрашиваю, безопасно ли ловить их в этом месте?Может ли такое же исключение быть выдано по какой-либо другой причине (которую я не знаю и поэтому не должен обрабатывать)?