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

GSON为什么只使用字段(private,public,protected)? 有没有办法让GSON只使用getter和setter?

一般来说,当你序列化/反序列化一个对象的时候,你是这样做的,最终得到一个对象状态的精确副本; 因此,您通常希望绕开通常在面向对象devise中所需的封装。 如果你没有规避封装,那么在序列化之前可能不可能得到一个在反序列化之后具有完全相同状态的对象。 此外,请考虑您不想为特定属性提供setter的情况。 如果你正在通过getter和setter来完成序列化/反序列化,那么应该如何处理呢?

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

还没。

从devise文档 :

这里也是支持物业的很好的参数。 我们打算在后一版本中增强Gson以支持属性作为指示Json字段的替代映射。 就目前而言,Gson是以田野为基础的。

可以补丁Gson来使用getters 。

我们的应用程序如何工作的模糊概述是,我们有很多TypeAdapter实现 – 一些用于特定的值类对象,一些用于beantypes的对象,我们知道JavaBean逻辑将工作。 然后我们在创buildGson对象之前将所有这些GsonBuilderGsonBuilder

不幸的是,GSON在处理Object[]types时真的很糟糕。 当我们试图用JSON对象来表示方法参数时,我们主要看到了这一点。 解决方法是制作反映方法的自定义TypeAdapter实例。 (这意味着你最终使用一个Gson实例,你打算调用每个方法…)