it-swarm.com.de

Warum verwendet Javascript JSON.stringify anstelle von JSON.serialize?

Ich wundere mich nur über "stringify" vs "serialize" . Für mich sind sie dasselbe (obwohl ich mich irren könnte), aber in meiner bisherigen Erfahrung (meistens mit asp.net ) benutze ich Serialize() und nie Stringify().

Ich weiß, dass ich einen einfachen Alias ​​in Javascript erstellen kann.

// either
JSON.serialize = function(input) {
    return JSON.stringify(input);
};

// or
JSON.serialize = JSON.stringify;

http://jsfiddle.net/HKKUb/

aber ich wundere mich nur über den Unterschied zwischen den beiden und warum stringify gewählt wurde.


zu Vergleichszwecken können Sie XML in C # in einen String serialisieren

public static string SerializeObject<T>(this T toSerialize)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
    StringWriter textWriter = new StringWriter();

    xmlSerializer.Serialize(textWriter, toSerialize);
    return textWriter.ToString();
}
18
Chase Florell

Schauen Sie sich die beiden Kommentare, die Sie zu der Frage abgegeben haben, genauer an:

Ich nehme an, nachdem ich meine Frage erneut gelesen habe, sehe ich, dass ich in meinem C # -Beispiel das XML serialisiere und dann das serialisierte Objekt ToString (); konvertiere. Dort liegt die Reibung.

und

Ich denke für die Kontinuität wäre es besser (für mich), eine Methode zu haben, die so aussieht ... JSON.serialize (obj) .toString (); oder jsonObject (). toString (); ... auf diese Weise würde es meinem C # sehr ähnlich sehen ... aber jetzt bin ich damit fertig, es zu komplizieren.

Denken Sie jetzt daran, dass ein Objekt in Javascript ein Hash ist (wenn Sie Prototype oder ein anderes Framework verwenden, sollte es als "spezielle Art von Hash" qualifiziert werden - aber die einfache Form funktioniert für dieses Beispiel):

var obj = {
   foo: 1,
   bar: function() { console.log(this.foo); }
}
obj.foo; // 1
obj.bar; // function reference
obj.bar(); // function call
obj['foo']; // 1
obj['bar']; // function reference
obj['bar'](); // function call

Der einzige Grund, warum eine serialize() in Javascript möglicherweise erforderlich ist, besteht darin, die Funktionen, Verweise auf andere Objekte usw. auszuschneiden.

Um zu Ihrem C # -Beispiel zurückzukehren: Wir haben .Serialize() als unnötig ausgeschnitten. Ein Objekt ist ein Hash, es ist bereits serialisiert, eine weitere "Serialisierung" müsste ohnehin manuell in Ihrem eigenen Code erfolgen. Alles was dich verlässt ist .ToString().

Ist .stringify() jetzt sinnvoller?

12
Izkata

Dies liegt daran, dass die Notation JSON 1999 nicht nach 2002 (asp.net wird in diesem Jahr veröffentlicht). Ich denke, sie wussten nichts über das serialize.

Spaß beiseite,

Wenn ich das Wort serialization höre, fällt mir als Erstes das Konvertieren der Daten in Bytes ein. Hier ist JSON.stringify absolut sinnvoll, da es das Objekt in eine Zeichenfolgendarstellung und nicht in eine Bytedarstellung konvertiert.

PS:

@Chase Florell, du kannst nicht einfach JSON.serialize, wie im strengen Modus, kann dieser Code in einigen Browsern tatsächlich fehlschlagen.

as JSON ist kein durchschnittliches Objekt.

11
Avinash R