Gson序列化一个bean

时间:2013-03-02 21:26:35

标签: java json serialization gson

当我有这样的实体时

class Foo
{
   private String Bar = "someBarValue";
}

以及以下声明

String json = new Gson().toJson(new Foo());

结果为{ "bar" : "someBarValue"}

我有很多遵循标准java bean约定的类

class FooBean
{
    String getBar() { return "someBarValue"; }
}

以及以下声明

String json = new Gson().toJson(new FooBean());

结果为{}

如何使用Gson序列化(并最终反序列化,如果我有setter)FooBean,而不必依赖类的私有成员变量?

1 个答案:

答案 0 :(得分:4)

截至今天,这是不可能的。看看Gson Design Document

  

使用字段与getter来表示Json元素

     

一些Json库使用类型的getter来推断Json元素。我们选择使用非瞬态,静态或合成的所有字段(继承层次结构)。我们这样做是因为并非所有类都使用适当命名的getter编写。此外,getXXX或isXXX可能是语义而不是指示属性。

     

但是,支持属性也有很好的理由。我们打算在后一版本中增强Gson以支持属性作为指示Json字段的备用映射。目前,Gson是基于领域的。

您可能会考虑的另一件事是序列化/反序列化的概念:为什么会对一个对象进行序列化/反序列化?通常,在持久性,通信(即主要是I / O)之后获得它的副本。不依赖于getter和setter这样做是有道理的。它们可能会更改对象的内容,因此序列化/反序列化将无法实现它们的构建。