【发布时间】:2011-09-06 09:43:12
【问题描述】:
为什么 GSON 使用 ONLY 字段(私有、公共、受保护)? 有没有办法告诉 GSON 只使用 getter 和 setter?
【问题讨论】:
为什么 GSON 使用 ONLY 字段(私有、公共、受保护)? 有没有办法告诉 GSON 只使用 getter 和 setter?
【问题讨论】:
可以将 Gson 修补到 use getters。
【讨论】:
有没有办法告诉 GSON 只使用 getter 和 setter?
还没有。
[T]这里也有很好的论据来支持属性。我们打算在后一个版本中增强 Gson 以支持属性作为指示 Json 字段的替代映射。目前,Gson 是基于字段的。
【讨论】:
这在我们的应用程序中如何工作的模糊概述是,我们有很多 TypeAdapter 实现 - 一些用于特定的类值对象,一些用于我们知道 JavaBeans 逻辑可以工作的 bean 样式对象。然后,在创建 Gson 对象之前,我们将所有这些都加到 GsonBuilder 上。
不幸的是,GSON 在处理Object[] 之类的类型方面确实很糟糕。当我们尝试创建一个 JSON 对象来表示方法参数时,我们经常看到这一点。解决方法是制作反映方法的自定义 TypeAdapter 实例。 (这确实意味着您最终要为每个您打算调用的方法使用一个 Gson 实例......)
【讨论】:
一般来说,当您序列化/反序列化对象时,您这样做是为了得到对象状态的精确副本;因此,您通常希望规避 OO 设计中通常需要的封装。如果您不规避封装,则可能无法最终得到一个在反序列化后具有与序列化之前完全相同的状态的对象。此外,请考虑您不想为特定属性提供 setter 的情况。如果您正在使用 getter 和 setter,序列化/反序列化应该如何处理?
【讨论】:
transient,因此它们不会被序列化,并应请求重新计算。