Java无法反序列化JSON

时间:2013-12-24 14:58:40

标签: java json deserialization flexjson

我在尝试反序列化我相信是有效的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一样......

2 个答案:

答案 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