Flexjsonを使ってGenericsなクラスへデシリアライズする

FlexjsonでGenericsなクラスへのデシリアライズがうまくいかずハマってました。

で、調査の結果こうやればうまくいくというのが、以下のコード。

デシリアライズはfromJson(String)で行っていますが、ここでのポイントは、2つ。

1. use(null, Person.class)
Deserializerにデシリアライズ対象のJSONが表すルートオブジェクトが何であるかを教えてあげる必要があります。
これを行わないとクラスキャストが出来ないと怒られます。(これで大分ハマった・・・)

java.lang.ClassCastException: java.util.HashMap cannot be cast to jp.co.pooh.FlexJsonTest.Person
at jp.co.pooh.FlexJsonTest.Person.fromJson(Person.java:33)
at jp.co.pooh.FlexJsonTest.PersonTest.testFromJson(PersonTest.java:16)
・・・

2. use(”detail”, PersonDetail.class)
型Tのクラス変数detailが何であるかDeserializerに教えてあげる必要があります。

2の制限から指定するTの数分だけデシリアライズ用メソッドを用意する必要があります。



2011/06/13追記
以下のように書いてやれば、Tの数分だけデシリアライズ用メソッドを用意する必要はありませんね。