我正在尝试使用json并使用Gson的能力将其转换为POJO。我使用序列化类作为一个单独的包中的类,但现在我试图让序列化类成为调用它的类的内部类,有点像我在下面描述的那样。
public class A {
private final Gson gson;
public A() {
gson = new GsonBuilder().serializeNulls().create();
}
public void foo(String json){
B b = gson.fromJson(json, B.class);
}
public static class B {
private String bar;
public String getBar(){
return bar;
}
}
}
示例JSON:
{"bar": "test"}
此设置返回内部类变量的空值;在这种情况下,只是吧。在这个例子中,我确保传入的json与B类中的变量名称相匹配。另外,我已经尝试过使内部类非静态和私有而没有成功。据我所知,它需要是一个静态类才能使用gson进行序列化。有什么明显的证据表明我做错了你能看到的吗?
答案 0 :(得分:0)
错误发生在其他地方。最有可能的是,您传递的String
或Gson
配置错误。我粘贴了完全相同的代码,它对我来说很好用:
public class Main {
public static void main (String[] args) {
new A().foo("{\"bar\": \"test\"}");
}
public static class A {
private final Gson gson;
public A() {
gson = new GsonBuilder().serializeNulls().create();
}
public void foo(String json){
B b = gson.fromJson(json, B.class);
System.out.println(b);
}
public static class B {
private String bar;
public String getBar(){
return bar;
}
@Override
public String toString() {
return "B{bar='" + bar + '\'' +
'}';
}
}
}
}
内部类假设工作,所以问题出在其他地方。这将打印出来:
B {巴='测试'}
答案 1 :(得分:0)
所以我想这是一个常见问题,现在我已经遇到过两次了。问题出在传入的JSON字符串中。我将JSON从某个地方复制并粘贴到命令行中。因此,报价未被注册为有效的引号。它是“
而不是"
。第二个是注册为引号的内容。感谢您的帮助。