如果GSON包装,GSON对同一个对象的行为会有所不同?

时间:2011-09-13 09:13:34

标签: java gson

短篇小说: 我有List<A> list。如果我使用gson.toJson(list) - 工作正常。 如果我有ListContainer(list),则gson.toJson(listContainer)返回包含空对象的列表。为什么?我该如何解决?

import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;

public class GsonTest {

    public static void main(String[] args) {
        new GsonTest();
    }

    public GsonTest() {

        Gson gson = new Gson();
        List<BasicInterface> kws = new ArrayList<BasicInterface>();

        for (int i = 0; i < 3; i++) {
            BasicInterface kw = new BasicInterfaceImpl("string_" + i);
            kws.add(kw);
        }

        System.out.print(gson.toJson(kws));
        /** Prints: [{"expression":"string_0"},{"expression":"string_1"},{"expression":"string_2"}] */

        Container kwc = new Container(kws);

        System.out.print(gson.toJson(kwc));
        /** Prints: {"list":[{},{},{}]}  */

    }
}

public class Container {

    private List<BasicInterface> list;

    public Container(List<BasicInterface> kws) {
        this.list = kws;
    }

    public List<BasicInterface> getList() {
        return list;
    }
}

public interface BasicInterface {

    String getExpression();
}

public class BasicInterfaceImpl implements BasicInterface {
    private String expression;

    public BasicInterfaceImpl(String expression) {
        this.expression = expression;
    }

    @Override
    public String getExpression() {
        return expression;
    }
}

1 个答案:

答案 0 :(得分:0)

快速修复:在容器中声明变量和方法时,使用 BasicInterfaceImpl 而不是 BasicInterface

为什么呢?不知道。我花了一个小时调试GSON源,但还不能确定: - )