Al implementar la interfaz ISerializable
en C#, proporcionamos un constructor que toma un objeto SerializationInfo
y luego lo consulta con varios métodos GetInt32
, GetObject
etc. para rellenar los campos del objeto que intentamos deserializar.¿Por qué SerializationInfo no tiene métodos TryGetValue?
Una de las principales razones para implementar esta interfaz, en lugar de utilizar el atributo [Serializable]
, es para la compatibilidad hacia atrás: si hemos añadido nuevos campos a la clase en algún momento, podemos coger el SerializationException
tirado por una versión serializada, mayores de la clase, y manejarlos de manera apropiada.
Mi pregunta es la siguiente: ¿por qué tenemos que usar estas excepciones para lo que es, esencialmente, flujo de control? Si estoy deserializando un gran número de clases que se guardaron hace algún tiempo, posiblemente cada campo faltante en cada clase arrojará una excepción, causando un rendimiento realmente malo.
¿Por qué la clase SerializationInfo
no proporciona los métodos que simplemente devolverían false
si la cadena del nombre no estuviera presente?
Haz quienquiera implementado esa clase –
bueno, tal vez están aquí: P –