Gson to pojo序列化内部类

时间:2017-07-13 11:54:43

标签: java json serialization gson

我正在尝试使用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进行序列化。有什么明显的证据表明我做错了你能看到的吗?

2 个答案:

答案 0 :(得分:0)

错误发生在其他地方。最有可能的是,您传递的StringGson配置错误。我粘贴了完全相同的代码,它对我来说很好用:

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从某个地方复制并粘贴到命令行中。因此,报价未被注册为有效的引号。它是而不是"。第二个是注册为引号的内容。感谢您的帮助。