Java JSON如何反序列化数组?
我正在使用fasterxml.jackson。我对Java JSON如何反序列化数组?,java,json,jackson,Java,Json,Jackson,我正在使用fasterxml.jackson。我对readValue()感到困惑。这是我的问题 我知道jackson用两种不同的方式反序列化普通JavaBean和集合。 对于JavaBean,我们可以将MyBean.class或newtypereference传递给readValue()。对于集合,我们必须传递新的TypeReference。这是因为TypeReference保存由集合擦除的类型。我说得对吗?:) 现在我很困惑。如果MyBean包含一个列表,那么我仍然可以传递MyBean.cla
readValue()
感到困惑。这是我的问题
我知道jackson用两种不同的方式反序列化普通JavaBean和集合。
对于JavaBean,我们可以将MyBean.class
或newtypereference
传递给readValue()
。对于集合,我们必须传递新的TypeReference
。这是因为TypeReference
保存由集合擦除的类型。我说得对吗?:)
现在我很困惑。如果MyBean
包含一个列表,那么我仍然可以传递MyBean.class
,并且它可以工作。杰克逊是怎么做到的
public class MyBean {
String str;
List<String> strList;
}
公共类MyBean{
字符串str;
列表strList;
}
您正在将MyBean.class
作为第二个参数传递给readValue()
,Jackson可以通过反射从中获取类型。我猜杰克逊是这样做的:
MyBean.class.getDeclaredField("strList").getGenericType();
这将导致一种类型的java.util.List
请注意,您有一个非泛型的类MyBean
,其中包含一个列表
。例如,如果您有:
class MyGenBean<T> {
List<T> list;
}
将返回
java.util.List
,您需要一个TypeReference
您正在传递MyBean.class
作为readValue()
的第二个参数,Jackson可以通过反射从中获取类型。我猜杰克逊是这样做的:
MyBean.class.getDeclaredField("strList").getGenericType();
这将导致一种类型的java.util.List
请注意,您有一个非泛型的类MyBean
,其中包含一个列表
。例如,如果您有:
class MyGenBean<T> {
List<T> list;
}
将返回
java.util.List
,并且需要TypeReference
strList字段的泛型类型可以使用反射。但是在Java中不能将List.class
作为参数传递。仅List.class
。也许这个链接可以帮助您我的问题是:我认为JSON无法反序列化列表,因为类型为erase。这就是为什么我们必须传递TypeReference。但如果JavaBean包含List,JSON如何在运行时知道它的泛型呢?strList字段的泛型类型可以通过反射获得。但是在Java中不能将List.class
作为参数传递。仅List.class
。也许这个链接可以帮助您我的问题是:我认为JSON无法反序列化列表,因为类型为erase。这就是为什么我们必须传递TypeReference。但若JavaBean包含List,JSON在运行时如何知道它的泛型呢?