2016-07-04 4 views
2

私はSwiftを初めて使い、iOS(iOS> = 8)プロジェクトのJSON文字列にオブジェクト構造をシリアル化する必要があります。 私はObjectMapperライブラリを使用することに決めました(私はそれをCocoapodと統合しました)。SwiftとObjectMapperで継承を使用するには?

しかし、私の問題は、その構造は次のとおりです。

ObjectAは、インスタンス変数に格納された配列として子オブジェクトのリストを持つことができます。 インスタンス配列に格納できるオブジェクトは、ObjectBとObjectCのように複数の型にすることができます。ですから、GSONを使ったJavaでは、InterfaceDを作成し、クラスを実装してObjectAストアのInterfaceD型で配列を作成しましたが、Swiftオブジェクトモデルでこれを行う方法はわかりません。{} JSONオブジェクト。

JSONは次のようになります。

{"children":[ 
    {"type":"ObjectB", "value1":"foo"}, 
    {"type":"ObjectC", "value1":"bar", "value2":"baz"} 
]} 

と私はObjectAにしてObjectCにからシリアル化する必要があり、2つのエントリが異なる構造を持っている必要があることを

{"children":[ 
    {}, 
    {} 
]} 

お知らせを得ます。

私は複数のことを試みましたが、毎回私は行き詰まっています。 ジェネリックを使ってみましたが、配列型としてMappableプロトコルを使用しようとしましたが、古典クラスの継承を試みましたが、いずれも失敗しました。

これをどのように達成できますか?

各オブジェクトにシリアル化関数を追加して文字列を再帰的に取得して連結できることを知っています。しかし、私は実際にAlamofireがすでにプロジェクトで使用されているので、すでにうまく使用しているので、自分でJSONシリアライザを実装しないようにしたいと思っています。また、新しいシリアライザを実装すると、エラーが発生しやすく、問題を解決するきれいな方法ではなくなります。

ありがとうございます。

答えて

0

解決策はありませんでしたが、回避策として、オブジェクトにすべての値から辞書を作成させました。次に、子オブジェクトの辞書を再帰的に現在の辞書の値として追加します。 プロトコルで強制された各オブジェクトにtoDict()関数を追加します。 結果のオブジェクトが辞書のみのツリーで構成されている場合、ObjectMapperのシリアル化は正常に機能します。

関連する問題