短篇小说:
我有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;
}
}
答案 0 :(得分:0)
快速修复:在容器中声明变量和方法时,使用 BasicInterfaceImpl 而不是 BasicInterface 。
为什么呢?不知道。我花了一个小时调试GSON源,但还不能确定: - )