1

ジャクソンの配列で始まるJSONファイルを逆シリアル化する方法とよく似ていますか? 次のような JSON REST 応答があります。

[
  {
    something
  },
  {
    something
  },
  ...
]

問題は、配列がトップレベルであることです。私は次のように呼び出してみcom.google.api.client.http.json.JsonHttpParserました:

Something[] result = jsonParser.parse(response, Something[].class); //array cannot be instantiated: java.lang.IllegalArgumentException: unable to create new instance of class [L...; because it is an array

List<Something> result = jsonParser.parse(response, List.class); //interface cannot be instantiated: java.lang.IllegalArgumentException: unable to create new instance of class java.util.List because it is an interface and because it has no accessible default constructor

ArrayList<Something> result = jsonParser.parse(response, ArrayList.class); //throws IllegalArgumentException: START_ARRAY

Something要素の逆シリアル化を許可するモデル クラスはどこですか。これらの代替手段はどれも機能しません。最後のスタックトレースは次のとおりです。

01-21 18:44:15.649: E/AndroidRuntime(3117): Caused by: java.lang.IllegalArgumentException: START_ARRAY
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.common.base.Preconditions.checkArgument(Preconditions.java:88)
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.api.client.json.JsonParser.startParsingObject(JsonParser.java:161)
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.api.client.json.JsonParser.parse(JsonParser.java:233)
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.api.client.json.JsonParser.parse(JsonParser.java:224)
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.api.client.json.JsonParser.parseAndClose(JsonParser.java:180)
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.api.client.json.JsonParser.parseAndClose(JsonParser.java:120)
01-21 18:44:15.649: E/AndroidRuntime(3117):     at com.google.api.client.http.json.JsonHttpParser.parse(JsonHttpParser.java:62)

どうすればいいですか?

4

1 に答える 1

0

google-api-client 1.4.1 クラスは、新しいインスタンスの作成に依存しているようで、この領域では START_ARRAY ではなく START_OBJECT でのみ動作します。つまり、トップレベルの配列をサポートしていません。

私はこれを回避できず、すべてを google-api-client 1.6.0 に更新することで解決しました。これは、更新とリファクタリングの作業が非常に大規模です。

于 2012-01-22T00:24:18.323 に答える