如何在java中将无名对象转换为JSON(使用GSON)?

如何在java中将无名对象转换为JSON(使用GSON)?,java,json,gson,Java,Json,Gson,我正在编写一个程序,用gson返回JSON对象,我发现了一些奇怪的东西。基本上,当我想将下面的对象转换为JSON时,它给了我null Customer customer = new Customer() { { setId(1); setName("Foo bar"); setAddress("Some Address"); } }; System.out.println(gson.toJson(customer)); 客户看起来

我正在编写一个程序,用gson返回JSON对象,我发现了一些奇怪的东西。基本上,当我想将下面的对象转换为JSON时,它给了我null

Customer customer = new Customer() {
    {
        setId(1);
        setName("Foo bar");
        setAddress("Some Address");
    }
};
System.out.println(gson.toJson(customer));
客户看起来像这样

public class Customer{
    int id;
    String name;
    String address;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }   
}
但当我正确地创建对象时

Customer customer = new Customer();
customer.setId(1);
customer.setName("Foo bar");
customer.setAddress("Some Address");
System.out.println(gson.toJson(customer));
它工作得非常好,并提供了预期的输出。
为什么我创建对象的方式很重要。两个方法之间有区别吗?

第一个案例返回null的原因是因为“customer”对象的类是匿名类,clazz.isAnonymousClass()返回true

有关GSon的实施,请参见下文


第一个案例返回null的原因是因为“customer”对象的类是匿名类,clazz.isAnonymousClass()返回true

有关GSon的实施,请参见下文


当然有区别。将
客户
定为最终目标,您的第一种方法就行不通了。为什么?因为您正在为
Customer
创建子类的匿名实例。这种方法被称为,但也有其缺点,因为阿蒙加伦的链接正在突出显示。如果您真的想使用这样的代码,那么最好创建一个生成器,并执行类似于
Customer Customer=new CustomerBuilder().id(1).name(“Foo-bar”).address(“Some address”).build()的操作。区别在于第一个生成器创建一个匿名类,然后创建该类的对象。在第二种情况下,创建
Customer
class.Btw的对象。读这个:当然有区别。将
客户
定为最终目标,您的第一种方法就行不通了。为什么?因为您正在为
Customer
创建子类的匿名实例。这种方法被称为,但也有其缺点,因为阿蒙加伦的链接正在突出显示。如果您真的想使用这样的代码,那么最好创建一个生成器,并执行类似于
Customer Customer=new CustomerBuilder().id(1).name(“Foo-bar”).address(“Some address”).build()的操作。区别在于第一个生成器创建一个匿名类,然后创建该类的对象。在第二种情况下,创建
Customer
class.Btw的对象。请阅读以下内容: