无法使用GSON将列表转换为JSON,并显示消息“声明多个JSON字段”

ajsxfq5m  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(571)

我正在尝试在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
bnlyeluc

bnlyeluc1#

Gson使用“类型适配器”来执行Java对象到JSON的转换,反之亦然。如果没有为类型提供自定义类型适配器,并且Gson也没有提供默认类型适配器,则Gson使用反射来确定如何将Java对象转换为JSON,以及如何将其转换回Java对象。然而,由于它考虑了私有字段,在对第三方库或Android平台中的类进行序列化或反序列化时,不应依赖于它。这些类的私有字段依赖于实现,在不同版本之间可能会重命名或删除,甚至在不同的Android设备之间可能会有所不同。
因此,即使异常与名为mChangingConfigurations的字段有关(该字段显然存在于类ColorStateList及其一个超类中),这里的主要问题是您正在尝试使用Gson来序列化Android平台类。
要解决这个问题,请尝试重构代码,不要将icon存储为JSON中的BitmapDrawable。根据您的用例,也许可以存储文件路径,或者图标的URL。然后,当再次阅读JSON时,您必须重新构建图标。
旁注:问题开头的toString()输出与Gson执行转换的方式无关,字符串android.graphics.drawable.BitmapDrawable@2f9631a恰好是默认的toString()结果。

相关问题