为什么GSON只使用字段(私有,公共,受保护)?有没有办法告诉GSON仅使用getter和setter?
Answers:
一般来说,当您对对象进行序列化/反序列化时,这样做的目的是得到对象状态的精确副本。因此,您通常希望避开OO设计中通常需要的封装。如果您没有规避封装,则可能无法得到反序列化后与序列化之前状态完全相同的对象。此外,考虑不希望为特定属性提供设置器的情况。如果您正在使用getter和setter,应该如何进行序列化/反序列化?
transient
以便不进行序列化,并应要求重新计算。
有没有办法告诉GSON仅使用getter和setter?
还没。
从设计文档:
[T]这里也有很好的论据来支持属性。我们打算在以后的版本中增强Gson以支持属性,作为表示Json字段的备用映射。目前,Gson是基于字段的。
关于它如何在我们的应用程序中起作用的模糊概述是,我们有很多TypeAdapter
实现-一些实现特定的类似于值的对象,还有一些实现了JavaBeans逻辑将起作用的bean样式的对象。然后,我们将所有这些卡GsonBuilder
在创建Gson
对象之前。
不幸的是,GSON确实不喜欢处理类似的类型Object[]
。当我们尝试制作一个JSON对象来表示方法参数时,我们通常会看到这一点。解决方法是制作TypeAdapter
反映方法的自定义实例。(这确实意味着您最终要对Gson
每个要调用的方法使用一个实例...)