2012-03-09 9 views
0

Gsonを使用して汎用リストを逆シリアル化しようとしています。 私は、次のJSONをデシリアライズすることができるよ:Java gsonの汎用配列/リストの逆シリアル化

[{"updated_at":"2012-03-09T11:13:31Z","id":1,"title":"Moda","position":0,"short_name":"Md"}, 
{"updated_at":"2012-03-09T11:13:40Z","id":2,"title":"Sissi","position":1,"short_name":"SI"}, 
{"updated_at":"2012-03-09T11:13:47Z","id":3,"title":"Levis","position":2,"short_name":"LV"}, 
{"updated_at":"2012-03-09T11:14:03Z","id":4,"title":"Dolce&Gabanna","position":3,"short_name":"DG"}] 

次のコードで:

T[] array = (T[])java.lang.reflect.Array.newInstance(p_class, 0); 
gson.fromJson(content, array.getClass()); 

しかし、今、私は私がgsonをデシリアライズする方法を見つけ出すことができないものを、次のJSONを持っています:

[{"brand":{"updated_at":"2012-03-09T11:13:31Z","id":1,"title":"Moda","position":0,"short_name":"Md"}}, 
{"brand":{"updated_at":"2012-03-09T11:13:40Z","id":2,"title":"Sissi","position":1,"short_name":"SI"}}, 
{"brand":{"updated_at":"2012-03-09T11:13:47Z","id":3,"title":"Levis","position":2,"short_name":"LV"}}, 
{"brand":{"updated_at":"2012-03-09T11:14:03Z","id":4,"title":"Dolce&Gabanna","position":3,"short_name":"DG"}}] 

ありがとうございます!

+0

奇妙なことには、使用していることです同じ手法で4ブランドモデルが作成されますが、それらの属性はすべてnullです。 – seriakillaz

+0

コードに 'p_class'とは何ですか? – curioustechizen

+0

p_classは、次のような単純なClassオブジェクトです。Brand.class – seriakillaz

答えて

4

ブランドのという名前のオブジェクトがあり、タイプがp_classの新しいクラスを作成する必要があります。以前と同じようにgsonを新しいクラスに使用すると、新しいクラスの配列が返されます。例えば:

class Brand{ 
    private p_class brand; 

    public p_class getBrand(){ 
     return brand; 
    } 
} 

とgson用:

List<Brand> brands = (List<Brand>) gson.fromJson(content, new TypeToken<List<Brand>>(){}.getType()); 

別の方法は、Androidフレームワークで利用可能な通常のJSONオブジェクトでやっているでしょう:

JSONArray ar = new JSONArray(content); 
    for(int i=0; i<ar.length(); i++){ 
     JSONObject obj = ar.getJSONObject(i); 

     //here is your desired object 
     p_class p = gson.fromJson(obj.getJSONObject("brand").toString(), p_class.class); 
    } 
+0

これらのクラスを総称して自動的に作成する方法はありますか?私はこのコードを汎用 – seriakillaz

+0

として予約する必要があります。私はちょうど私の答えを更新しました。 2番目のオプションは例です – waqaslam

+0

最初の解決策は一般化することはできませんが、2番目の解決策は可能ですので、間違いなく良い答えです。ありがとうございます!! – seriakillaz

関連する問題