我在尝试反序列化我认为是有效的 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。
查看文档,问题是您的 json 没有声明其类。这意味着您明确需要向反序列化程序提供一个Class
对象,因为在 Java 中泛型只是编译时,而不是运行时。
引用文档:
我们需要替换在实例化反序列化程序时刚刚删除的类型信息。为此,我们将要使用的类传递给
flexjson.JSONDeserializer.deserialize(String, Class)
方法,如下所示:Hero hero = new JSONDeserializer<Hero>().deserialize( jsonHarvey, Hero.class );
所以使用:
Signin signin = deserializer.deserialize(json, Signin.class);
您使用的这个库似乎真的不受支持。
似乎自 2010 年以来就没有改变过。我会尝试使用其他东西。
例如,我已经使用了这个,没有任何问题。
http://code.google.com/p/google-gson/downloads/list