JSON如何反序列化数组?

时间:2017-05-28 11:48:40

标签: java json jackson

我正在使用fasterxml.jackson。我对readValue()感到困惑。这是我的问题。

我知道jackson以两种不同的方式反序列化普通的JavaBean和Collection。 对于JavaBean,我们可以将MyBean.classnew TypeReference<MyBean>传递给readValue()。对于收藏集,我们必须通过new TypeReference<List<MyBean>>。这是因为TypeReference保存了Collection删除的类型。我对吗? :)

现在我很困惑。如果MyBean包含列表,那么我仍然可以通过MyBean.class并且它可以正常运行。杰克逊是怎么做到的?

public class MyBean {
    String str;
    List<String> strList;
}

1 个答案:

答案 0 :(得分:0)

你将MyBean.class作为第二个参数传递给readValue(),杰克逊可以通过反思得到这个类型。我猜杰克逊会做这样的事情:

MyBean.class.getDeclaredField("strList").getGenericType();

将导致java.util.List<java.lang.String>类型。

请注意,您的非通用class MyBean包含List<String>。如果您有:例如:

class MyGenBean<T> {
    List<T> list;
}

然后

MyGenBean.class.getDeclaredField("list").getGenericType();

会返回java.util.List<T>,您需要TypeReference