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

查看文档,问题在于您的 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 回答