2

有効な JSON 文字列であると思われるものを逆シリアル化しようとすると、エラーが発生します。

String json = "{\"email\":\"testing@example.com\",\"password\":\"12345\"}";

// FlexJSON deserializer
JSONDeserializer<Signin> deserializer = new JSONDeserializer<Signin>();

// Deserialize into a Signin POJO.
Signin signin = deserializer.deserialize(json);

このコードを実行すると、次のようになります。

java.util.HashMap cannot be cast to com.myapp.server.Signin
java.lang.ClassCastException: java.util.HashMap cannot be cast to com.myapp.server.Signin
    at com.myapp.server.SigninService.doPost(SigninService.java:39)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    ... rest of stack trace omitted for brevity

私の JSON は不正な形式ですか? JSONがどういうわけか「悪い」ものであり、FlexJSONがそれをHashMapのように扱っているかのようです...

4

2 に答える 2

4

documentationを見ると、問題はjsonがそのクラスを宣言していないことです。これは、明示的Classにデシリアライザーにオブジェクトを提供する必要があることを意味します。Java ジェネリックは実行時ではなくコンパイル時のみであるためです。

ドキュメントから引用するには:

デシリアライザーをインスタンス化するときに、ドロップした型情報を置き換える必要があります。そのために、使用したいクラスを次のflexjson.JSONDeserializer.deserialize(String, Class)ようにメソッドに渡します。

Hero hero = new JSONDeserializer<Hero>().deserialize( jsonHarvey, Hero.class ); 

だから使用:

Signin signin = deserializer.deserialize(json, Signin.class);
于 2013-12-24T15:04:39.750 に答える
1

あなたが使用しているこのライブラリは、実際にはサポートされていないようです。
2010年から変更されていないようです。別のものを使用してみます。

たとえば、これを問題なく使用しました。
http://code.google.com/p/google-gson/downloads/list

于 2013-12-24T15:02:38.203 に答える