为什么 GSON 使用字段而不是 getter/setter?

为什么 GSON 使用 仅此而已字段(私有、公共、受保护) ? 有没有办法告诉 GSON 只使用 getter 和 setter?

52757 次浏览

一般来说,当你序列化/反序列化一个对象的时候,你这样做是为了得到一个对象状态的精确副本; 因此,你通常想要绕过面向对象设计中通常需要的封装。如果您不规避封装,那么在反序列化之后,对象的状态可能不会与序列化之前完全相同。此外,考虑不希望为特定属性提供 setter 的情况。如果使用 getter 和 setter,序列化/反序列化应该如何进行?

有没有办法告诉 GSON 只使用 getter 和 setter?

还没有。

来自 设计文件:

[ T ]这里也有很好的参数来支持属性。我们打算在后一个版本中增强 Gson,以支持属性作为指示 Json 字段的替代映射。目前,Gson 是基于字段的。

可以将 Gson 接入 使用吸气剂

在我们的应用程序中,这个工作原理的模糊轮廓是,我们有很多 TypeAdapter实现——一些用于特定的值类对象,一些用于 bean 样式的对象,在这些对象中,我们知道 JavaBeans 逻辑可以工作。然后,在创建 Gson对象之前,我们将所有这些内容都插入到一个 GsonBuilder中。

不幸的是,GSON 在处理像 Object[]这样的类型时真的很糟糕。当我们试图创建一个 JSON 对象来表示方法参数时,我们经常看到这种情况。解决办法是制作反映这些方法的自定义 TypeAdapter实例。(这确实意味着,对于每个要调用的方法,您最终只能使用一个 Gson实例...)