2

Gson を使用して JSON オブジェクト内の配列を逆シリアル化する方法がわかりません。逆シリアル化しようとしている json オブジェクトは次のようになります。

{"item0":3,
 "item1":1,
 "item2":3,
 "array":[
    {"arrayItem1":321779321,
     "arrayItem2":"asdfafd",
     "arrayItem3":"asasdfadf"}]}

私は次のようなクラスを構築することに成功しました:

public class Watchlist {
 private int itemn0;
 private int itemn1;
 private int itemn2;
 private Object array;

}

しかし、gson が配列をデシリアライズしようとすると、例外がスローされます。

com.google.gson.JsonParseException: Type information is unavailable, and the target object is not a primitive: <my gson array>

これを逆シリアル化する方法を教えてください。

4

2 に答える 2

1

あなたの「配列」は配列です。だからwatchListクラスで

    public class Watchlist {
    private int itemn0;
    private int itemn1;
    private int itemn2;
    private List<watchListarray> array;

 //constructor
  //getter & setter of all

}

now watchListarray class
 public class watchListarray{
  String arrayItem1="";
  String arrayItem2="";
  String arrayItem3="";
//constructor 
 //getter & setters of all
}

今すぐダウンロードGson参照を使用してください:http://primalpop.wordpress.com/2010/06/05/parsing-json-using-gson-in-android/

于 2011-03-11T10:35:41.970 に答える
0

ここにはいくつかの問題があります:

1つは、あなたが思っているように配列を使用しているとは思いません。「arrayItem1」から3までありますが、それらは配列内の単一のJSONオブジェクトに含まれています...したがって、配列には実際には1つのアイテムしかありません。

配列はおそらく次のようになります。

"array": [
  321779321,
  "asdfafd",
  "asasdfadf"
]

2 つ目はarray、Java クラスの の型がObject... であり、オブジェクトの変換に使用する型情報が Gson に提供されないことです。通常、配列がマップするオブジェクトの型を asList<String>またはList<Integer>そのようなものとして宣言する必要があります。これにより、必要な型情報が得られます... JSON 配列は にマップできListString型パラメーターは、配列の内容を変換する型を指定します。

あなたの例の配列の問題は、それが同種ではないということです...それには数字と2つの文字列が含まれています。一般に、配列/コレクションでこのようなタイプを混在させることは避ける必要があります。ただし、arrayオブジェクトの型を次のように宣言することはできList<String>ます...String数値の形式を取得するだけです。

于 2010-10-17T01:58:50.813 に答える