无法使用带有消息 "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.
我正在尝试借助 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.