Bei der Implementierung der -Schnittstelle in C# stellen wir einen Konstruktor zur Verfügung, der ein SerializationInfo
-Objekt annimmt und dann mit verschiedenen Methoden GetInt32
, GetObject
usw. abfragt, um die Felder des Objekts zu füllen, das wir deserialisieren möchten.Warum hat SerializationInfo keine TryGetValue-Methoden?
Ein wichtiger Grund, diese Schnittstelle zu implementieren, anstatt nur mit dem [Serializable]
Attribut ist für die Abwärtskompatibilität: Wenn wir neue Felder der Klasse an einem bestimmten Punkt hinzugefügt haben, können wir die SerializationException
durch eine serialisierte, ältere Version geworfen fangen der Klasse, und behandeln sie in angemessener Weise.
Meine Frage ist die folgende: Warum müssen wir diese Ausnahmen für das verwenden, was im Wesentlichen Kontrollfluss ist? Wenn ich eine große Anzahl von Klassen deserialisiere, die vor einiger Zeit gespeichert wurden, löst möglicherweise jedes fehlende Feld in jeder Klasse eine Ausnahme aus, was zu einer wirklich schlechten Leistung führt.
Warum bietet die Klasse SerializationInfo
keine TryGetValue
Methoden, die einfach false
zurückgeben würden, wenn die Namenszeichenfolge nicht vorhanden wäre?
fragt wer auch immer implementiert diese Klasse –
gut vielleicht sind sie hier: P –