我在尝试反序列化我相信是有效的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一样......
答案 0 :(得分: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);
答案 1 :(得分:1)
你正在使用的这个库看起来真的不受支持。
似乎自2010年以来没有改变。我会尝试使用别的东西。
我用这个例子没有任何问题
http://code.google.com/p/google-gson/downloads/list