无法使用带有消息 "declares multiple JSON fields" 的 GSON 将列表转换为 JSON

Not able to convert list to JSON with GSON with message "declares multiple JSON fields"

我正在尝试借助 GSON

将此列表转换为 json
[DataClass(label=valueOne, text=some.value, version=9.0, ui=null, ref=null, icon=android.graphics.drawable.BitmapDrawable@2f9631a), DataClass(label=valueOne, text=some.value, version=9.0, ui=null, ref=null, icon=android.graphics.drawable.BitmapDrawable@2f9631a)]

得到这个错误

java.lang.IllegalArgumentException: class android.content.res.ColorStateList declares multiple JSON fields named mChangingConfigurations

这是我的做法

 Gson().toJson(list)

可能是什么问题?

它出于某种原因抱怨这个可绘制源。但不确定为什么。我在想这是因为 @ 并将其更改为常规 Z 但仍然没有成功

这里是drawable的值

android.graphics.drawable.BitmapDrawableZ25d399b

Gson 使用 'type adapters' 执行从 Java 对象到 JSON 的转换,反之亦然。如果没有为某个类型提供自定义类型适配器,并且Gson也没有提供default one,Gson通过反射来确定如何将Java对象转换为JSON以及如何转换它回到 Java 对象。但是,因为它考虑了私有字段,所以在从第三方库或 Android 平台序列化或反序列化 classes 时不应依赖它。这些 class 的私有字段是 implementation-dependent,它们可能会在版本之间被重命名或删除,甚至可能在不同的 Android 设备之间有所不同。

因此,即使异常是关于名为 mChangingConfigurations 的字段,它显然存在于 class ColorStateList 及其超classes 之一中,这里的主要问题是您正在尝试使用 Gson 序列化 Android 平台 classes.

要解决此问题,请尝试重构您的代码以不将 icon 存储为 JSON 中的 BitmapDrawable。根据您的用例,也许可以存储文件路径或图标的 URL。然后当再次阅读 JSON 时,您必须重建图标。

作为旁注:您在问题开头显示的 toString() 输出与 Gson 如何执行转换无关。字符串 android.graphics.drawable.BitmapDrawable@2f9631a 恰好是 default toString() result.