Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Serialisierung sollte durchgeführt werden, wenn Sie neue Klassen entwerfen, da Klassen nach ihrer Kompilierung nicht mehr serialisierbar sind. Einige der zunächst zu klärenden Fragen lauten: Muss die Klasse über Anwendungsdomänen hinweg gesendet werden? Soll diese Klasse in Verbindung mit Remoteanwendungen zum Einsatz kommen? Wozu werden die Benutzer diese Klasse verwenden, d. h., werden sie ggf. eine neue Klasse von der Klasse ableiten, die serialisiert werden muss? Wenn Sie Zweifel haben, sollten Sie die Klasse immer als serialisierbar markieren. Es ist sogar empfehlenswert, alle Klassen als serialisierbar zu markieren. Eine Ausnahme stellen die folgenden Fälle dar:
- Es ist ausgeschlossen, dass die Klasse anwendungsdomänenübergreifend verwendet wird. Wenn die Klasse anwendungsdomänenübergreifend verwendet werden muss und keine Serialisierung erforderlich ist, leiten Sie sie von MarshalByRefObject ab.
- Die Klasse speichert besondere Zeiger, die nur für die aktuelle Instanz der Klasse gelten. Wenn eine Klasse beispielsweise nicht verwalteten Speicher oder Dateihandles enthält, müssen Sie sicherstellen, dass diese Dateien als NonSerialized markiert werden. Andernfalls darf die Klasse überhaupt nicht serialisiert werden.
- Datenmember von Klassen enthalten vertrauliche Daten. In diesem Fall ist es ratsam, die Klasse als serialisierbar zu markieren. Die einzelnen Datenmember, die vertrauliche Informationen enthalten, sollten jedoch als NonSerialized markiert werden. Eine Alternative besteht darin, die ISerializable-Schnittstelle zu implementieren und nur die erforderlichen Felder zu serialisieren.
Beachten Sie die mit dem Markieren einer Klasse als serialisierbar verbundenen Auswirkungen auf die Sicherheit. Eine Verknüpfungsforderung oder eine Vererbungsforderung für eine CodeAccessPermission einer Klasse oder eines Klassenkonstruktors kann in der Standardeinstellung oder durch benutzerdefinierte Serialisierung umgangen werden, die eine entsprechende Forderung für dieselbe CodeAccessPermission implementiert. Wenn eine Klasse eine Verknüpfungsforderung für eine Berechtigung aufweist, wird nur der unmittelbare Aufrufer überprüft, um sicherzustellen, dass dem Aufrufer die Berechtigung erteilt wurde. Der .NET Framework-Klassenbibliothekscode ist mit dem starken Microsoft-Namen signiert und wird immer als vollständig vertrauenswürdig eingestuft. Um Link-Time-Sicherheitsüberprüfungen zu umgehen, kann jeder Code einen Code verwenden, der als vollständig vertrauenswürdig eingestuft ist. Bei der Serialisierung kann z. B. bösartiger Code, der nicht die erforderliche Serialisierungsberechtigung hat, eines der vollständig vertrauenswürdigen .NET Framework-Formatierungsprogramme wie BinaryFormatter aufrufen und die Verknüpfungsforderungsüberprüfung für die Berechtigung umgehen.
Siehe auch
Binäre Serialisierung | Zugriff auf Objekte in anderen Anwendungsdomänen mit .NET-Remoting | XML- und SOAP-Serialisierung | Sicherheit und Serialisierung