Java 无法反序列化 JSON



我在尝试反序列化我认为是有效的 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

相关内容

  • 没有找到相关文章