2011-08-23 24 views
7

GSONを使用してAndroidでJSONをシリアル化/逆シリアル化しようとしています。私はデータをデシリアライズ/シリアライズのためGSONを使用していますGSONカスタムオブジェクトの配列の逆シリアル化

public class User { 
@SerializedName("name") 
private String _name; 
@SerializedName("role") 
private int _role; 
} 

public class Session { 
@SerializedName("name") 
private String _name; 
@SerializedName("users") 
private ArrayList<User> _users = new ArrayList<User>(); 
} 

と:私はこのように見える2つのクラスを持っています。私はそうのようにシリアライズ:

Gson gson = new Gson(); 
String sessionJson = gson.toJson(session); 

これは、このようになりますJSON生成されます。

{ 
"name":"hi", 
    "users": 
[{"name":"John","role":2}] 
} 

をそして私はそうのようにデシリアライズ:

Gson gson = new Gson(); 
Session session = gson.fromJson(jsonString, Session.class); 

私が作るとき、私はエラーを取得していますこの呼び出し。

DEBUG/dalvikvm(739): wrong object type: Ljava/util/LinkedList; Ljava/util/ArrayList; 
WARN/System.err(739): java.lang.IllegalArgumentException: invalid value for field 

このエラーの意味はわかりません。私は自分自身が間違って何かをやっているのを見ない。どんな助け?ありがとう!

+1

セッションクラスのユーザーリストをArrayListからListに変更すると、問題が解決しないようです。これはGSONの問題を引き起こすはずですか? –

答えて

11
これにあなたのコードを変更

public class Session { 
    @SerializedName("name") 
    private String _name; 
    @SerializedName("users") 
    private List<User> _users = new ArrayList<User>(); 
    } 

それは良い練習用インターフェイスだし、GSONは(少なくとも、追加の設定なし)ことが必要です。

Gsonは、JavaScriptの配列「[]」をLinkedListオブジェクトに変換します。

コードでは、GSONは_usersフィールドにLinkedListを挿入しようとします。そのフィールドはListであると考えます。

関連する問題