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

时间:2011-06-01 15:15:18

标签: java gson

为什么GSON使用 ONLY 字段(私有,公共,受保护)? 有没有办法告诉GSON只使用getter和setter?

4 个答案:

答案 0 :(得分:89)

一般来说,当你序列化/反序列化一个对象时,你这样做是为了得到一个对象状态的精确副本;因此,您通常希望避免在OO设计中通常所需的封装。如果不绕过封装,则可能无法在反序列化之后使用与序列化之前具有完全相同状态的对象。此外,请考虑您不希望为特定属性提供setter的情况。如果您正在使用getter和setter,序列化/反序列化应如何起作用?

答案 1 :(得分:24)

  

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

还没有。

来自the design doc

  

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

答案 2 :(得分:4)

可以将Gson修补为use getters

答案 3 :(得分:0)

在我们的应用程序中如何工作的模糊概述是我们有很多TypeAdapter实现 - 一些用于特定的类似对象,一些用于bean风格的对象,我们知道JavaBeans逻辑可以工作。然后,在创建GsonBuilder对象之前,我们将所有这些卡在Gson上。

不幸的是,GSON在处理像Object[]这样的类型时确实很糟糕。当我们尝试创建一个JSON对象来表示方法参数时,我们主要看到了这一点。解决方法是制作反映方法的自定义TypeAdapter实例。 (这意味着您最终会为每个要调用的方法使用一个Gson实例...)