Freigeben über


Serialisierungsrichtlinien

Sie sollten die Serialisierung schon beim Entwurf neuer Klassen in Betracht ziehen, weil eine Klasse nach ihrer Kompilierung nicht serialisierbar gemacht werden kann. Dabei sind unter Anderem folgende Fragen zu berücksichtigen: Muss diese Klasse an andere Anwendungsdomänen gesendet werden? Wird diese Klasse jemals in Verbindung mit Remoting verwendet? Wie werden die Benutzer diese Klasse verwenden (leiten sie unter Umständen eine neue Klasse von dieser Klasse ab, die serialisierbar sein soll)? Im Zweifelsfall markieren Sie die Klasse als serialisierbar. Es ist wahrscheinlich besser, alle Klassen als serialisierbar zu markieren, sofern nicht eine der folgenden Aussagen zutrifft:

  • Die Klasse wird eine Anwendungsdomäne nie verlassen. Wenn keine Serialisierung erforderlich ist und die Klasse von einer Anwendungsdomäne in eine andere übertragen werden muss, leiten Sie die Klasse von MarshalByRefObject ab.

  • Die Klasse speichert spezielle Zeiger, die nur auf die aktuelle Instanz der Klasse anwendbar sind. Wenn die Klasse beispielsweise nicht verwaltete Speicher- oder Dateihandles enthält, stellen Sie sicher, dass diese Dateien mit dem NonSerializedAttribute-Attribut markiert sind, oder serialisieren Sie die Klasse nicht.

  • Datenmember der Klasse enthalten vertrauliche Informationen. In dieses Fall ist es ratsam, die Klasse als serialisierbar zu markieren, die einzelnen Datenmember, die vertrauliche Daten enthalten, jedoch mit dem NonSerializedAttribute-Attribut zu markieren. Eine weitere Alternative besteht darin, die ISerializable-Schnittstelle zu implementieren und nur die erforderlichen Felder zu serialisieren.

Beachten Sie, welche Auswirkungen es auf die Sicherheit hat, wenn eine Klasse als serialisierbar markiert wird. Eine Anforderung des Typs Link Demand oder Inheritance Demand für eine Berechtigung des Typs CodeAccessPermission für eine Klasse oder einen Klassenkonstruktor kann standardmäßig oder durch eine benutzerdefinierte Serialisierung, die eine entsprechende Anforderung für den gleichen Berechtigungstyp CodeAccessPermission implementiert, umgangen werden. (Weitere Informationen finden Sie unter der SecurityAction-Enumeration.) Wenn für eine Klasse Link Demand als Berechtigung festgelegt wurde, überprüft das Laufzeitmodul nur den unmittelbaren Aufrufer, um sicherzustellen, dass der Aufrufer über die betreffende Berechtigung verfügt. Der Code der .NET Framework-Klassenbibliothek ist mit dem starken Namen Microsoft signiert und gilt stets als voll vertrauenswürdig. Jeder Code kann Code, dem volle Vertrauenswürdigkeit gewährt wird, verwenden, um Sicherheitsüberprüfungen während des Verknüpfens zu umgehen. Beispielsweise kann im Fall der Serialisierung bösartiger Code, der nicht über die erforderlichen Serialisierungsrechte verfügt, eine der voll vertrauenswürdigen Formatierungsklassen aus dem .NET Framework aufrufen, z. B. BinaryFormatter, und auf diese Weise die Überprüfung des Verknüpfungsaufrufs nach der Berechtigung umgehen.

Siehe auch

Weitere Ressourcen

Binäre Serialisierung
Remote Objects
XML- und SOAP-Serialisierung
Security and Serialization

Footer image

Copyright © 2007 by Microsoft Corporation. Alle Rechte vorbehalten.