在改造 2 和 Gson 中作为请求主体的通用对象列表

ErG*_*404 5 android gson retrofit2

作为我的应用程序全局重构的一部分,我第一次尝试改造 2。

我的应用程序存储从传感器读取的不同国王的数据。每个度量都有共同的特征,所以我为我需要的每种数据创建了一个父度量类(它不是抽象的)和几个子类。例如,我创建了一个 TemperatureMeasure 子类。

我有权访问一个公共 API,我无法更改该 API 以发送我在我的应用程序中收集的度量。

使用改造(2.0 beta),我用这个方法声明了一个接口:

@POST("/bdd/measure/send/{measureType}/{sensorId}")
Call<APIResponse> sendFludiaRaw(@Path("site") String siteId, @Path("measureType") String measureType, @Path("sensor") String sensorId, @Body List<? extends Measure> measures);
Run Code Online (Sandbox Code Playgroud)

我的计划是能够通过提供扩展 Measure 类的对象列表来调用此方法。我使用 Gson 转换器作为串行器。当我调用这个方法时——例如使用一个 TemperatureMeasure 对象列表——创建的 JSON 对象只包含 Measure 类的成员,但没有来自 TemperatureMeasure 成员的任何内容。

解决此问题的最佳解决方案是什么?

根据我一直在阅读的内容,一种选择是实现串行器/解串器并将其提供给 Gson 转换器。当遇到 Measure 对象时,该序列化程序会自动尝试序列化正确的子类。另一种选择是使用 Gson 自己处理序列化,并将原始 JSON 数据作为字符串提供给改造调用,但这会破坏使用改造的好处。我发现的最后一个选项是在我的改造界面中为每种度量创建一个请求。

是否有更好的通用友好选项可以阻止我在某处编写巨大的 switch 语句?

谢谢