2014-05-06 40 views
5

有很多關於SO的問題和答案,要求我如何在目標c中連續化一個對象。我應該使用NSCoder來連載到JSON嗎?

以下3層的方法在上述鏈接所有提及。

1)使用NSJSONSerialization將對象序列化爲JSON。看起來不錯,但是這需要所討論的對象是頂層的數組或字典。常見的解決方案是聲明自定義的toDictionaryserialise方法,該方法在屬性上循環並設置相關的鍵和值。

2)符合NSCoder協議,有點像上面的方法,但似乎有一些混淆,這是否可以連續化到JSON或只是到NSData

3)第三方庫。

我對使用什麼方法略有困惑。我想序列化爲JSON,有一些矛盾的答案,說明你可以使用NSCoder一些說不。我知道第三方應用程序將工作,但我寧願實現一些簡單的選項1或2.

想法?

+0

我寫了一個Backbone.js的端口到Objective C.你可以看看我如何處理JSON(de)序列化:https ://github.com/geon/Backbone.m/blob/master/BackboneModel.m#L229 – geon

回答

0

1,你基本上是從零開始寫一個基於JSON的NSCoder實現。當然可以,但是。

2,我認爲這可能是可能的,因爲我認爲NSCoder的輸出是some variant of XML(儘管壓縮成二進制blob)。但是,我不知道這是否是一種好方法,因爲這種格式是專有的,並不是真正意義上的人爲可編輯的。在密鑰和葉節點方面,JSON和NSCoder格式允許的內容之間可能存在不匹配,從而迫使您進行混亂的轉換。

我一直在嘗試做類似的事情,並根據我的研究,我實際上建議3。使用諸如Mantle之類的東西 - 一個穩定,精緻的框架,可以頻繁更新 - 您可以準確指定模型對象將如何從JSON序列化爲序列化和反序列化。它甚至支持NSCoder協議作爲選項! (這是有效的解決方案1,但由第三方審查和維護。)