Quando si implementa l'interfaccia ISerializable
in C#, forniamo un costruttore che prende un oggetto SerializationInfo
e poi lo interroga con vari metodi GetInt32
, GetObject
ecc. Per riempire i campi dell'oggetto che stiamo tentando di deserializzare.Perché SerializationInfo non ha i metodi TryGetValue?
Uno dei motivi principali per implementare questa interfaccia, piuttosto che utilizzando l'attributo [Serializable]
, è per la compatibilità all'indietro: se abbiamo aggiunto nuovi campi alla classe ad un certo punto, siamo in grado di prendere il SerializationException
lanciata da una versione serializzata più vecchia della classe e gestirli in modo appropriato.
La mia domanda è la seguente: perché dobbiamo usare queste eccezioni per ciò che è, essenzialmente, il flusso di controllo? Se sto deserializzando un gran numero di classi che sono state salvate qualche tempo fa, potenzialmente ogni campo mancante in ogni classe genererà un'eccezione, causando prestazioni davvero pessime.
Perché la classe SerializationInfo
non fornisce i metodi TryGetValue
che restituirebbero semplicemente false
se la stringa del nome non fosse presente?
Chiedi chi implementato quella classe –
beh forse sono qui: P –