2017-01-01 4 views
6

配列を持つJsonファイルを逆シリアル化する必要があります。それを逆シリアル化してListオブジェクトを取得する方法はわかっていますが、フレームワークではJava Listインターフェイスを実装していないカスタムリストオブジェクトを使用しています。私の質問は、どのように私のカスタムリストオブジェクトのデシリアライザを書くのですか?Gsonでカスタムリストデシリアライザを作成する方法は?

編集:私は、デシリアライザは普遍になりたい、私はリストのすべての種類のためにそれotの仕事をしたいということを意味し、CustomList<Integer>CustomList<String>のような、CustomList<CustomModel>すべてのためにデシリアライザを作るために迷惑になるので、リストのだけではなく、特定の種類私は種類を使用します。

+2

カスタムリストオブジェクト? –

+0

[this](http://stackoverflow.com/questions/16590377/custom-json-deserializer-using-gson) –

+0

を参照してください@ReazMurshed私はそれを行うことができましたが、私はそれをオブジェクトモデルに逆シリアル化しています残りのコードで使用してください。 ModelJsonクラスとModelクラスを作成することができます。ここで、ModelJsonはJavaからのListインターフェイスを使用し、逆シリアル化にのみ使用され、後でModelクラスに変換されます。この問題は、私はそれを行うクラスがたくさんあるので、それは少し痛みがあり、より洗練されたソリューションがあるかどうか不思議です。もし私がハードコーディングのパスを下って行くのではないが、私はしなくてもいいと思う。 – BananyaDev

答えて

2

これは私が思いついたものです:

class CustomListConverter implements JsonDeserializer<CustomList<?>> { 
    public CustomList deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext ctx) { 
     Type valueType = ((ParameterizedType) typeOfT).getActualTypeArguments()[0]; 

     CustomList<Object> list = new CustomList<Object>(); 
     for (JsonElement item : json.getAsJsonArray()) { 
      list.add(ctx.deserialize(item, valueType)); 
     } 
     return list; 
    } 
} 

このようにそれを登録します。あなたが最初のJavaクラスで最初にそれをデシリアライズし、その後に、独自のトランスを書いていないのはなぜ

Gson gson = new GsonBuilder() 
     .registerTypeAdapter(CustomList.class, new CustomListConverter()) 
     .create(); 
+0

ご迷惑をおかけして申し訳ありません。あなたの答えは確かに正しいです。私は非常に良い先生、ありがとう。 – BananyaDev

関連する問題