2012-05-08 14 views
1

NSOrderedSetsをJSONにシリアライズおよびデシリアライズするためのオプションは何ですか?私はiOS5/Objective-Cを使用しています。私は、私は自分をロールバックことができると思いますが、私はJSONがsetデータ型を持っていない、とそのArrayが注文されているので、あなたがNSArrayに変換することができ...そこにいくつかの良い既存のフレームワークがあるiOS内のNSOrderedSetのJSONシリアル化

+0

SetをArrayに変換する前にSetに変換したくない特定の理由はありますか? – Alladinian

+0

@Alladinian - 私は多くのネストされたセット/配列を含むモデルを持っています。それは私が連載するのに必要なモデルです。モデル全体に​​対してNSJSONSerializationを使用することは素晴らしいことですが、モデル全体をNSArderedSetをNSArraysに変換する必要があります。私はモデル全体を渡すことができるシリアライゼーションクラスを探しています。これは、このようにモデルを前処理することなくNSOrderedSetsを処理します。 – Journeyman

+0

これは意味があります。私たちは 'NSManagedObjects'について話していますか? – Alladinian

答えて

0

あなたの唯一のオプションはおそらく、オープンソースのライブラリーにアクセスしたり、JSONシリアライザの実装方法のコードを見てみましょうします。その後、あなたの目的のために図書館を拡張することができます。 「拡張する」とは、既存のライブラリから可能な限り活用することです。独自のシリアライザを最初から作成することは、多くの作業につながる可能性があるためです。

通常、JSONライブラリは、JSONタイプと対応するObjective-Cタイプ(クラス)間のマッピングを定義します。たとえば、JSON配列はNSArray/NSMutableArrayにマップされ、JSONオブジェクトはNSDictionary/NSMutableDictionaryなどにマップされます。

したがって、「JSONシリアライザ」は「マップされた」Objective-Cオブジェクトをシリアライズする方法JSON要素に追加します。この動作を実装する1つの方法は、マッピングされたObjective-Cクラスにカテゴリを追加することです。

"ライブラリを拡張する"場合(ライブラリと実装に応じて)、カスタムクラスのカテゴリを追加し、それに応じて実装すれば十分でしょう。

私はJSONライブラリの著者です。 JSONシリアライザで使用できるカスタムクラスのカテゴリを作成することはそれほどの労力を要しません。エンハンスメントリクエストでニーズを指定するかもしれないので、カスタムクラスを追加しやすくするためにライブラリを調整することができます。次のように

あなたのカテゴリーは、次のようになります。 - マイライブラリにいくつかの調整を行った後、

@interface NSOrderedSet (JPJsonWriter) <JPJsonWriterInserterProtocol> 
@end 

@implementation NSOrderedSet (JPJsonWriter) 

- (int) JPJsonWriter_insertIntoBuffer:(NSMutableDataPushbackBuffer*)buffer 
          encoding:(JPUnicodeEncoding)encoding 
           options:(JPJsonWriterOptions)options 
           level:(NSUInteger)level 
{ 
    return insertJsonArray(self, buffer, encoding, options, level); 
} 

@end 

をこれは、あなたが何をすべきか、実際にすべてです。ただし、これは使用しているJSONライブラリに依存しています。私のJSONライブラリはhereにあります。改善要求を提出してください - ありがとうございます。

3

を想定しています最初にしてこのように、シリアライズ:

NSOrderedSet *os = [NSOrderedSet orderedSetWithObjects:@"1", @"2", @"3", nil]; 
NSArray *jsonArr = [os array]; 
// JSON Data 
NSData *json = [NSJSONSerialization dataWithJSONObject:jsonArr options:0 error:nil]; 
// JSON String representation 
NSString *jsonString = [[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding]; 
関連する問題