0

次のようなメッセージで json で応答する REST サービスを使用します。

{
   "statusMessage":{
      "message":"my message",
      "error":false
   },
   "data":null
}

フィールドdataは配列で、null の場合もあれば、1 つのクラスのインスタンス (Partner、Department、Building など、1 つのタイプのみ) で埋められる場合もあります。

私のJavaアプリにはServerResponseクラスがあり、次のようになります。

public class ServerResponse {

    private StatusMessage statusMessage;
    private List<Object> data;

    public ServerResponse(StatusMessage statusMessage, List<Object> data) {
        this.statusMessage = statusMessage;
        this.data = data;
    }
    ...
}

がnullのときdataは問題ありませんが、オブジェクトでいっぱいになったとき、デシリアライズする方法がわかりません。私が使用する場合:

response = gson.fromJson(result, ServerResponse.class);

のオブジェクトのリストをキャストまたは使用できませんdata。さらに、Java でフィールド データを次のように宣言すると、次のようになります。

private List<Department> data;

タイプでは問題なく動作しますDepartmentが、予想どおり、他のタイプではエラーがスローされます。私は立ち往生しています...

4

1 に答える 1

0

のタイプを指定しない場合data、つまりList<Object>現在のように使用すると、少なくともマップのリストが取得されます (マップには、コンテンツに応じてリストまたはマップを含めることができます)。

コンテンツによってオブジェクトのタイプを判別できる場合は、ここで質問されているような単純なカスタム デシリアライザーを記述できます(チェックisAフィールド) 。

于 2013-11-09T22:36:10.350 に答える