2014-05-06 11 views
5

Es gibt eine Reihe von Fragen und Antworten zu SO, die fragen, wie ich ein Objekt in Ziel c serialisieren kann.Soll ich mit NSCoder zu JSON serialisieren?

Die folgenden 3 Verfahren sind alle in den oben erwähnten Verbindungen.

1) Verwenden Sie NSJSONSerialization, um das Objekt zu JSON zu serialisieren. Scheint gut, aber dies erfordert, dass das betreffende Objekt entweder ein Array oder ein Wörterbuch auf seiner obersten Ebene ist. Übliche Lösung ist das Deklarieren benutzerdefinierter toDictionary oder serialise Methode, die die Eigenschaften überschleifen und den relevanten Schlüssel und die Werte festlegen.

2) Entsprechen Sie dem Protokoll NSCoder, ein wenig wie der Ansatz oben, aber es scheint etwas Verwirrung darum, ob dies zu JSON oder nur zu NSData serialisieren kann.

3) Bibliothek eines Drittanbieters.

Ich bin ein wenig verwirrt, was für einen Ansatz zu nehmen. Ich möchte zu JSON serialisieren, es gibt widersprüchliche Antworten, einige sagen, dass Sie NSCoder verwenden können, manche sagen nicht. Ich weiß, dass eine Drittanbieter-App funktioniert, aber ich würde eher etwas einfaches wie Optionen 1 oder 2 implementieren.

Gedanken?

+0

Ich schreibe einen Backbone.js-Port zu Ziel C. Sie könnten sehen, wie ich JSON (de) Serialisierung behandelt: https : //github.com/geon/Backbone.m/blob/master/BackboneModel.m#L229 – geon

Antwort

0

Mit 1, Sie würden grundsätzlich eine JSON-basierte Implementierung von NSCoder von Grund auf neu schreiben. Natürlich machbar.

Mit 2 glaube ich, dass es möglich sein könnte, da ich denke, die Ausgabe von NSCoder ist some variant of XML (obwohl in einen binären Blob komprimiert). Ich weiß jedoch nicht, ob dies ein großartiger Ansatz ist, da das Format proprietär ist und nicht wirklich von Menschen bearbeitet werden sollte. Es gibt möglicherweise auch eine Diskrepanz zwischen dem, was in JSON im Vergleich zu dem NSCoder Format in Bezug auf Schlüssel und Blattknoten erlaubt ist, was Sie zu einer unordentlichen Konvertierung zwingt.

Ich habe versucht, etwas ähnliches zu tun, und basierend auf meiner Forschung, ich schlage eigentlich vor 3. Mit etwas wie Mantle - einem stabilen, polierten Framework, das häufig aktualisiert wird - können Sie genau angeben, wie Ihre Modellobjekte von JSON serialisiert und deserialisiert werden. Es unterstützt sogar das Protokoll NSCoder als Option! (Dies ist effektiv Lösung 1, aber überprüft und von einer dritten Partei gewartet.)

Verwandte Themen