当我有这样的实体时
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
,而不必依赖类的私有成员变量?
答案 0 :(得分:4)
截至今天,这是不可能的。看看Gson Design Document:
使用字段与getter来表示Json元素
一些Json库使用类型的getter来推断Json元素。我们选择使用非瞬态,静态或合成的所有字段(继承层次结构)。我们这样做是因为并非所有类都使用适当命名的getter编写。此外,getXXX或isXXX可能是语义而不是指示属性。
但是,支持属性也有很好的理由。我们打算在后一版本中增强Gson以支持属性作为指示Json字段的备用映射。目前,Gson是基于领域的。
您可能会考虑的另一件事是序列化/反序列化的概念:为什么会对一个对象进行序列化/反序列化?通常,在持久性,通信(即主要是I / O)之后获得它的副本。不依赖于getter和setter这样做是有道理的。它们可能会更改对象的内容,因此序列化/反序列化将无法实现它们的构建。