java - Gson - 它是如何工作的?

标签 java json gson

我正在使用 Gson,它能够做一些我没有想到的事情。 请看下面的代码,我正在 Outer 中创建 InnerList,然后将其转换为 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/

相关文章:

php - 安卓/PHP : how to POST/GET JSON data from Android to php

java - 首先匹配最小嵌套部分的正则表达式

java - 如何清除ArrayList而不影响下一个函数?

php - 我将如何防止在 MySQL 数据库上运行查询并以 JSON 格式输出的 PHP Web 服务脚本的热链接?

java - Java通过参数获取类型

java - HTML 字段 json 编码为深层嵌套对象

java - GSON - 日期格式

java - 如何创建 POJO?

java - 单击菜单项保存 Activity 图像

java - 为什么我在解析 json 响应时看到最后一项?