Java 内部类的Gson到pojo序列化

Java 内部类的Gson到pojo序列化,java,json,serialization,gson,Java,Json,Serialization,Gson,我正在尝试使用Gson的功能将json转换为POJO。我让它作为一个单独包中的类来处理序列化类,但现在我试图让序列化类成为调用它的类的内部类,就像我在下面描述的那样 public class A { private final Gson gson; public A() { gson = new GsonBuilder().serializeNulls().create(); } public void foo(String json){

我正在尝试使用Gson的功能将json转换为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对其进行序列化。你能看到我有什么明显的错误吗

错误在其他地方。您传递的
字符串
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{bar='test'}


错误在别的地方。您传递的
字符串
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{bar='test'}



所以我想这是一个常见的问题,因为我已经遇到过两次了。问题出在传入的JSON字符串中。我将JSON从某处复制并粘贴到命令行中。因此,这些报价没有被注册为有效的引号。它是
而不是
"
。第二个是注册为引号的内容。感谢所有的帮助。

所以我想这是一个常见的问题,因为我已经遇到过两次。问题在于传入的JSON字符串。我复制了JSON并将其粘贴到命令行中的某个位置。结果,引号没有注册为有效的引号离子标记。它是
而不是
"
。第二个是注册为引号的。感谢所有的帮助。

可能是您缺少了bar的setter吗?您可以发布一个JSON示例吗?我不认为是这样的,因为这些正是我在单独的包(而不是内部类)中工作时使用的类。尽管如此,我还是尝试了,但没有成功幸运的话。我会编辑我的帖子来添加一个JSON示例。为什么当所有发生的事情都是立即被覆盖时,
gson
作为
foo
函数的一个参数呢?实际上,我的代码中的其他地方也发生了这种情况,我只是添加了它来显示它被设置成了什么,因为我发现以前的问题,它一定有e
serializeNulls()
中的方法可能是您缺少了bar的setter?您可以发布一个示例JSON吗?我不认为是这样的,因为这些正是我在单独的包中工作时使用的类,而不是内部类。尽管如此,我还是继续尝试了,但没有任何运气。我将编辑我的帖子以添加示例JSON。为什么有
>gson
作为
foo
函数的一个参数,当它被立即覆盖时?实际上,我的代码中的其他地方也发生了这种情况,我只是添加了它来显示它被设置为什么,因为我发现前面的问题,它必须有
serializeNulls()
方法在我实际拥有的代码中,与我为问题制作的简化版本相反,
gson
设置在
class A
的构造函数中。在这种情况下,我将编辑我的问题以更准确地反映这一点——我认为简化不会引起关注。我的答案仍然有效。请参阅更新。您可以其他地方有问题可能您将错误的字符串传递给
foo
。刚刚解决。这与我传递的字符串有关--我想这是一个常见问题,我将在稍后发布我的答案。如果答案对您有用,您可以投票/接受。我做到了!不幸的是,自从我的帐户基本上不用于发布和回答,因此不会显示。在我实际拥有的代码中,与我为问题制作的简化版本相反,
gson
在本例中设置在
class A
的构造函数中。我将编辑我的问题以更准确地反映这一点——我认为简化不会发生请关注。我的答案仍然有效。请参阅更新。您在其他地方遇到问题可能您将错误的字符串传递给了
foo
。刚刚解决。这与我传递的字符串有关--我想这是一个常见问题,我会在稍后发布我的答案。如果答案对您有用,您可以向上投票/接受。我做到了!不幸不过,我目前的声誉还不到15,因为我的账户基本上不用于发布和回复,所以它不会出现。