Warum haben Sie zu markieren, eine Klasse mit dem Attribut [serializable]?
Sehen, wie können Sie konvertieren Sie jedes Dokument in einem byte array und speichern es auf die Festplatte und dann neu erstellen, die Datei in seiner ursprünglichen form (so lange, wie Sie meta-Daten für den Dateinamen etc.).
Warum haben Sie zu markieren, eine Klasse mit [Serializable]
etc? Ist, dass gerade die gleiche Idee, "meta-Daten" geben Sie die Informationen so, wenn Sie CASTET das Objekt zu seiner Klasse Dinge zugeordnet sind, richtig?
- Für Vollständigkeit, wenn Sie der Speicherung der Daten (auf der Festplatte etc), ich nicht empfehlen
BinaryFormatter
(das ist das Haupt, das sich über diesem). Die meisten anderen serialisierungsprogramme wird den job zu erledigen, aber ohne zu beißen Sie, wenn Sie ändern Sie die Typen. - Jedoch, die
BinaryFormatter
ist bei weitem der mächtigste. Es serialisiert Felder und Eigenschaften, es serialisiert das gesamte Objekt einschließlich private Felder, und es unterstützt die zyklische Verweise, plus die umgeht-Objekt-Konstruktion, somit nicht verlangen, einen öffentlichen default-Konstruktor, von denen keiner z.B. dieXmlSerializer
bietet. Wenn Sie möchten, zu ändern, Sie haben zu bewältigen, mit Versionierung. - Im Gegenteil: why-doesnt-the-xmlserializer-need-the-type-to-be-marked-serializable
Du musst angemeldet sein, um einen Kommentar abzugeben.
First off, müssen Sie nicht haben zu.
Es ist einfach ein marker-Schnittstelle, erzählt die serializer, die Klasse besteht aus Elemente, die Sie serialisieren können (die kann oder kann nicht wahr sein) und dass ist kann, verwenden Sie die Standard-Serialisierung.
Den
XMLSerializer
hat die zusätzliche Anforderung, eine null-parameter-Konstruktor der Klasse.Gibt es andere serialisierungsprogramme, dass die Verwendung von Verträgen für die Serialisierung (wie die
DataContractSerializer
) - Sie geben Ihnen mehr Kontrolle über die Serialisierung als nur die Kennzeichnung einer Klasse alsSerializable
. Sie können auch mehr Kontrolle durch die Umsetzung derISerializable
- Schnittstelle.XmlSerializer
kümmert sich nicht um[Serializable]
.Binäre Serialisierung ist ziemlich mächtig, Sie können erstellen eine Instanz einer Klasse ohne Konstruktor und kann-Felder in Ihrer Klasse, dass Sie private deklariert. Regelmäßige code kann natürlich nicht tun. Durch die Anwendung der [Serializable] - Attribut explizit geben Sie den Startschuss, um Durcheinander mit Ihre privaten Teile. Und Sie implizit geben diese Erlaubnis nur auf die BinaryFormatter-Klasse.
XML-Serialisierung nicht brauchen diese Art von okay, es sind nur serialisiert, Mitglieder, die öffentlich sind.
DataContractSerializer serialisieren können private Mitglieder als gut. Es muss daher eine explizite wieder okay, jetzt mit dem [DataContract] Attribut.
FormatterServices
- Klasse, die Sie zu erstellen können nicht initialisierte Objekte! Böse! 🙂Es ist im Grunde Metadaten, die angibt, dass eine Klasse serialisiert werden kann, nichts mehr.
Ist es erforderlich, durch eine Menge von Rahmen serialisierungsprogramme, die sich weigern, befassen sich mit Typen ohne dieses Attribut angewendet.
Serialisierung erstellen kann Sicherheitslücken aufweisen und kann sein geplagt durch Versionierung Probleme. Auf top von, dass, für einige Klassen, die Idee der Serialisierung ist einfach nur Unsinn.
Für details, siehe das ausgezeichnete Antworten auf Warum muss Java Serializable-interface?, vor allem diese eine, diese eine, und diese eine. Sie machen den Fall, dass der Serialisierung werden sollte, eine Funktion, die Sie haben, um sich explizit in die.
Für einen Kontrapunkt, die akzeptierte Antwort auf diese Frage macht den Fall, dass die Klassen müssen serialisierbar sein, standardmäßig.
Zeigt den serializer, dass Sie wollen, dass die Klasse serialisiert werden kann, wie möglicherweise möchten Sie nicht alle Eigenschaften oder Klassen, die serialisiert werden soll.
Sehe ich es als eine Erinnerung, daß ich die Klasse serialisiert werden kann. Damit Sie nicht implizit serialisiert etwas, was Sie nicht sollte.
Weiß es nicht, der Designer Absicht.
BTW, ich Liebe es einfach
BinaryFormatter
und verwenden Sie es so viel wie ich kann. Es behandelt ziemlich viel von dem Zeug automatisch (wie Neuerstellen von komplexen Objekt-Graphen mit wiederkehrenden Verweise verteilt in der Grafik).