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()>
Antwort
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.
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.
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.
- 1. Überladen des Operators << in einer Template-Klasse
- 2. Was macht eine Klassendefinition innerhalb einer Klasse << self?
- 3. Auswirkung des Hinzufügens neuer Spalten zu bestehender Tabelle
- 4. Auswirkung der Bildschirmaktualisierung
- 5. Konstante in Klasse << self block
- 6. Überladen des Operators << zum Akzeptieren einer Template-Funktion
- 7. Unterschied zwischen Klasse und Klasse <?>
- 8. C# - Auswirkung des zurückkehrenden Bytearrays des Speicherstroms unmittelbar vor der Ausgabe des Streams?
- 9. UITextField attributiedPlaceholder hat keine Auswirkung
- 10. Klasse << Notation in Modulen
- 11. kann nicht Element des Typs machen <Klasse 'sqlalchemy.dialects.postgresql.base.UUID>
- 12. Legendes Klasse <?>
- 13. Konvertierung des Typs einer Template-Klasse?
- 14. Verwenden einer Klasse innerhalb des Moduls
- 15. Was bedeutet Klasse << selbst?
- 16. Rubin Alternative zur Klasse << Sache
- 17. Hat die Reihenfolge der Importanweisungen eine Auswirkung?
- 18. Retargetting Lösung hat keine Auswirkung
- 19. MongoDB-Index hat keine Auswirkung
- 20. Instanceof Klasse <?> Parameter
- 21. CKReference .DeleteSelf-Attribut hat keine Auswirkung
- 22. Java: Get List <> Produkte von einer Klasse in JComboBox einer anderen Klasse
- 23. Ist die T-Klasse in generischer Klasse <T> einer anderen Klasse zuweisbar?
- 24. Problem beim Abrufen des Eigenschaftswerts einer Instanz einer OWL-Klasse
- 25. Verbieten des Überschreibens einer Methode in einer abgeleiteten Klasse
- 26. Reihenfolge des Ladens einer Klasse aus einer WAR-Datei
- 27. Primärschlüssel Auswirkung auf die Leistung in SQLite
- 28. Verwendung einer Klasse <T> Instanz als ein Typparameter
- 29. Ableiten einer Klasse von einer abgeleiteten Klasse
- 30. "IsAsync" hat keine Auswirkung auf langsame Eigenschaft?
Summiert es ziemlich gut ... http: //stackoverflow.com/questions/2595104/why-do-you-have-to-mark-a-class-with-the-attribute-serializable –