2016-08-01 6 views
0

Ich habe mich gerade über XML-Serialisierung gefragt. Wenn ich es richtig verstehe, ist der Hauptgrund dafür, dass Sie Ihre Objektdaten leichter transportieren können. Habe ich recht? Außerdem habe ich versucht, Daten unter Verwendung eines Konstruktors zu serialisieren, aber es besagt, dass man nur Daten "serialisieren" kann, die "parameterlos" sind. Die Sache ist, ich mag Konstrukteure, weil es mir erlaubt, zum Beispiel eine Spielerklasse zu haben, und das Hinzufügen eines neuen Spielers mit allen Eigenschaften ist viel produktiver, als alle Eigenschaften einzeln einstellen zu müssen. Also ist die große Frage hier, was ist der große Zweck der XML-Serialisierung, wie sind die Möglichkeiten, es zu verwenden? Ich sehe es so, dass es meinem Code eine weitere Stufe der Komplexität hinzufügt, weil ich jetzt eine Klasse brauche, um meine Daten zu serialisieren. Kann jemand Licht abwerfen ?!C# Xml Serialisierung großer Zweck?

+0

Sie müssen keine neue Klasse erstellen, um Ihr Objekt zu serialisieren. Versuchen Sie, den Standard XMLSerializer zu verwenden. Sollte für die meisten Ihrer Aufgaben ausreichen. "Serialisieren Sie nur Daten, die" parameterlos "sind" - fügen Sie Ihrer Klasse einfach einen parameterlosen Konstruktor hinzu. https://msdn.microsoft.com/en-us/library/58a18dwa(v=vs.110).aspx – MikkaRin

+0

Nun, ich mag verschiedene Klassen für verschiedene Aufgaben haben, so dass ich die Klasse nur bei Bedarf anrufen kann! Aber danke für den Link, das war hilfreich :) – Maxwell

+0

Sie können so viele Klassen erstellen, wie Sie möchten. XMLSerialiser konvertieren Sie einfach Ihre Klasse in XML und zurück – MikkaRin

Antwort

2

Wenn Sie sich über den allgemeinen Zweck der Serialisierung zu sprechen, streng genommen, Serialisierung (beachten Sie, dass ich „Serialisierung“, sagte nicht „XML-Serialisierung“ - mehr dazu in einer Sekunde) macht nicht nur Transport Objekte einfacher, es ist die nur Weise, die Sie ein Objekt transportieren könnten.

Wie in der Antwort von Pablo Santa Cruz angegeben, ist XML eine von vielen Möglichkeiten, Daten zu serialisieren. Wenn Sie irgendwo Daten speichern oder senden wollen, müssen Sie zunächst eine Möglichkeit haben, sie zu repräsentieren. Serialisierung bedeutet im Wesentlichen, dass Sie Ihren Objektstatus in einem bestimmten Format darstellen. Deserialisierung ist das Gegenteil - rekonstruieren Sie bei gegebener Darstellung eines Objektzustandes den ursprünglichen Objektzustand.

In diesem Sinne sind XML - Serialisierung, Speichern eines Objektstatus in einer Datenbank irgendwie, Speichern als JSON, Speichern in einigen Binärformaten und Speichern in einigen XML - Format alle Beispiele der Serialisierung (weil Sie die Objektstatus in einem vordefinierten Format für die spätere Verwendung).

Während ein beliebiges definiertes Format technisch Serialisierung sein kann, gibt es mehrere Standardmethoden. XML und JSON sind bei weitem die gebräuchlichsten Formate, weil sie standardisiert, leicht zu parsen, leicht zu beschränken sind (z. B. mit XML-Schema), weit verbreitet von Bibliotheken unterstützt werden, relativ menschenlesbar sein können (was das Debuggen einfacher macht) und Sie sind weit verbreitet.

Für den Fall, dass der letzte Punkt ein wenig seltsam klingt (sie sind weit verbreitet, weil sie weit verbreitet sind), neigen Standards ihrer Natur nach dazu, einen starken Netzwerkeffekt zu haben. Mit anderen Worten, je mehr Menschen sie anpassen, desto nützlicher sind sie; Zum Beispiel ist es nur nützlich, eine E-Mail zu haben, wenn Sie sie tatsächlich verwenden können, um andere Leute zu kontaktieren - es wäre nicht einmal ein bisschen nützlich, eine E-Mail zu haben, wenn Sie die einzige Person wären, die sie benutzt.

Eine Menge von Standards und Technologien wird sich gegenüber Mitbewerbern mehr durchsetzen, weil sie mehr frühe Adapter haben, als weil sie notwendigerweise technisch überlegen sind. Selbst wenn jemand eindeutig beweisen könnte, dass OS X ein "besseres" Betriebssystem als Windows ist, ist es beispielsweise egal, weil viel mehr Software für Windows entwickelt wird und es für Menschen zu teuer wäre, zu OS X zu wechseln .(Sie könnten ein ähnliches Argument für Token Ring im Vergleich zu Ethernet machen).

+0

Das war sehr hilfreich, danke, dass Sie sich die Zeit genommen haben, eine detaillierte Antwort zu geben! – Maxwell

1

Die Serialisierung dient zum Speichern der Objektrepräsentation (auf einer Datenträgerdatei, auf dem Draht {Netzwerktransport}, in einer HTTP-Sitzung, in einer Datenbank). Die XML-Serialisierung ist nur eine Art der Serialisierung.

Der Grund, warum Sie einen parameterlosen Konstruktor zur Unterstützung der Serialisierung benötigen, ist, dass der AUTO DESERIALIZER eine LEERE (ohne kleine Daten) -Klasse erstellen muss, bevor Sie ihn mit den entsprechenden Daten füllen.

Sie müssen nicht ONE WAY oder THE OTHER verwenden, weil Sie eine Klasse mit mehreren Konstruktoren haben können (die parameterlose wird bei der Deserialisierung verwendet, und Sie können die andere verwenden, wo immer Sie in Ihrem benötigen Code).

+1

Also, wenn ich richtig verstehe, im Kontext des Spielemachens, wenn Sie eine gespeicherte Spieldatei haben wollen, werden Sie XML verwenden, um die Daten zu serialisieren und es zu deserialisieren, wenn Sie eine gespeicherte Datei laden, oder? – Maxwell

+0

Ja @SirMaxwell, das ist ein guter Fall, um es zu erklären. –