2010-11-22 3 views
3

Sie können eine Klasse als serialisierbar markieren, indem Sie die verwenden. Sie können ein Objekt jedoch noch serialisieren, ohne es serialisierbar zu markieren. Was bewirkt dies?Auswirkung des Nichtmarkierens einer Klasse <Serializable()>

+1

Summiert es ziemlich gut ... http: //stackoverflow.com/questions/2595104/why-do-you-have-to-mark-a-class-with-the-attribute-serializable –

Antwort

0

Wie ich verstehe, könnten Sie ein Surrogat verwenden, um ein nicht serialisierbares Objekt zu serialisieren, aber was würde Sie dazu auffordern? Ich glaube nicht, dass private Mitglieder mit diesem Ansatz serialisiert werden. Sie benötigen wahrscheinlich einen Standardkonstruktor usw.

2

Ich gehe davon aus, dass Sie, wenn Sie sagen "Sie können ein Objekt serialisieren, ohne es serialisierbar zu machen" meinen, dass Sie die Serialisierung/Deserialisierung selbst durchführen.

Hinzufügen des [Serializable] Attribut zeigt Code von Drittanbietern, dass das Objekt serialisiert werden kann. Dies ist besonders nützlich, wenn Sie ein Objekt in einer ASP.NET-Sitzung oder in einem anderen Tool (z. B. einem Memcached-Cache) speichern möchten.

1

Setzen Sie [Serializable] auf einen Typ können Sie es mit den [System.Runtime.Serialization][1] APIs verwenden, die ziemlich praktisch für die häufigsten Szenarien sind und Sie viel Repetitive Code zum Serialisieren/Deserialisieren Ihrer Objekte zu schreiben, die in der Regel umständlich ist Test- und Fehler anfällig. Und sie gewinnen an Flexibilität in Bezug auf die zugrundeliegenden Speichermechanismen (wie zB Binary, XML, SOAP ...).

Wenn Sie [Serializable] auf einen Ihrer Typen setzen, sollten Sie sicherstellen, dass er ordnungsgemäß serialisiert/deserialisiert wird, oder Sie müssen ISerializble implementieren, um den Prozess selbst zu steuern. Dinge, die Sie nicht serialisieren sollten, sind z.B. Ereignishandler-Eigenschaften.

Vor allem, wenn Sie entscheiden, ob Serializable verwenden oder nicht, erhalten Sie eine kostenlose Serialisierung des vollständigen Objektdiagramms (Root-Objekt sowie alle seine Zuordnungen und ihre Zuordnungen), die andernfalls sehr komplex wäre, besonders wenn Vererbung ist beteiligt. Aber damit dies funktioniert, müssen Sie alle Typen in der Grafik Serializable haben.

Verwandte Themen