1

私のアプリケーションが通信している API は、次のような応答を送信します。

{
    Code: 200,
    Message: "HELLO",
    Data: []
}

Data フィールドは常にSOMETHINGの配列です。ただし、その何かは、テキストの単一ノード、別の別の配列、またはさまざまなオブジェクトの組み合わせのいずれかである可能性があります。

以下の例では、データ ノードはcar オブジェクトの配列の配列です

Data: [ [ {car:1}, {car:2} ] ]

もう 1 つの戻り値の型は、昆虫オブジェクトの配列である可能性があります。

Data: [ {insect : spider} ]

これを処理する Gson オブジェクトを設計したいのですが、最善の方法は何かと考えていました。

私が最初に考えたのは、CodeandMessageフィールドを保持する抽象クラスを作成し、すべてが独自のDataフィールドを持つ多くのサブタイプを作成することです。次に、それを.fromJson()サブクラスに渡すだけです。

Gsonが違いを処理できるように設計するためのより最適な方法はありますか?

4

2 に答える 2

3

ベストアンサーだと思うものを見つけました。かなり簡単です!

クラスをジェネリックにし、Gson に渡す前に TypeToken を作成して型を提供します。

   public class Response<T> {

        private String code;
        private String message;
        private List<T> data;
    }

次に、Gson を使用する場合:

   Type myCarListResponse = new TypeToken<Response<List<Car>>>(){}.getType();
   Response<List<Car>> response = gson.fromJson(json, myCarListResponse);

Data> を、ノードから期待されるタイプに置き換えます。上記の例は、元の投稿の最初の例を満たしています。

2 番目の例を満たすには、次のようにします。

  Type myInsectResponse = new TypeToken<Response<Insect>>(){}.getType();
  Response<Insect> response = gson.fromJson(json, myInsectResponse);
于 2013-08-04T01:45:23.933 に答える
0

Jackson では、@JsonAnyGetter/Setterこれを実現するために使用できます。

http://www.cowtowncoder.com/blog/archives/2011/07/entry_458.htmlhttp://wiki.fasterxml.com/JacksonFeatureAnyGetterを参照してください。

于 2013-08-04T02:22:01.817 に答える