我正在使用 Gson,它能够做一些我没有想到的事情。
请看下面的代码,我正在 Outer
中创建 Inner
的 List
,然后将其转换为 json 字符串。
我不明白如何在从 Json 对象返回的路上,Gson 知道它应该从类 Inner
创建对象。据我所知,通用信息不是编译类的一部分,并且在 Json 字符串中没有任何线索。尽管如此,Gson 正在创建一个 Inner inside 列表
有谁知道Gson是怎么做到的?
public class JsonTest {
public static void main(String[] args){
Inner inner1 = new Inner();
inner1.setIn1(100);
inner1.setIn2(200);
Inner inner2 = new Inner();
inner2.setIn1(101);
inner2.setIn2(201);
Outer outer = new Outer();
outer.setOut1(500);
outer.setOut2(600);
outer.getInnerList().add(inner1);
outer.getInnerList().add(inner2);
Gson gson = new Gson();
String jsonStr = gson.toJson(outer);
System.out.println(jsonStr);
Outer outerFromJson = gson.fromJson(jsonStr, Outer.class);
System.out.println(outerFromJson.getInnerList().get(0).getClass());
}
public static class Outer{
private int out1;
private int out2;
private List<Inner> innerList = new ArrayList<Inner>();
public int getOut1() {
return out1;
}
public void setOut1(int out1) {
this.out1 = out1;
}
public int getOut2() {
return out2;
}
public void setOut2(int out2) {
this.out2 = out2;
}
public List<Inner> getInnerList() {
return innerList;
}
public void setInnerList(List<Inner> innerList) {
this.innerList = innerList;
}
public static class Inner{
private int in1;
private int in2;
public int getIn1() {
return in1;
}
public void setIn1(int in1) {
this.in1 = in1;
}
public int getIn2() {
return in2;
}
public void setIn2(int in2) {
this.in2 = in2;
}
}
}
}
最佳答案
反射(reflection)
Field field = Outer.class.getDeclaredField("innerList");
System.out.println(field.getGenericType().toString());
output:
java.util.List<foo.JsonTest$Outer$Inner>
关于java - Gson - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8523057/