我使用的是Gson v2。8.2和改造v2。我有两门课,答案是。kt:
open class Answer(@SerializedName("answer")
var text: String,
val id: Int)
答案ummary.kt:
class AnswerSummary(val answer: Answer) : Answer(answer.text, answer.id) {
val percent: Int = 0
}
我正在列表中使用它(在Java中,仍在迁移到Kotlin):
public List<AnswerSummary> getAnswerSummaries() {
return answerSummaries;
}
当val
未被删除时,我得到一个错误:class Answer摘要(val答案:答案)...
:
java.lang.IllegalArgumentException: Unable to create converter for class com.name.app.model.response.AnswerResponse
....
Caused by java.lang.IllegalArgumentException: class com.name.app.model.pojo.AnswerSummary declares multiple JSON fields named answer
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:170)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
at com.google.gson.Gson.getAdapter(Gson.java:423)
at com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53)
....
删除“val”后:class AnswerSummary(答案:答案)
,错误消失。为什么会这样,因为我只注释了一个字段?-
@SerializedName(“应答”)变量文本:String
。
我找到了一种在保持不变性(“val”)的同时避免崩溃的方法——使用不同的变量名:
class AnswerSummary(val-ans:Answer)
。后台发生的事情——是否与@SerializedName字段值与变量名相同有关?
尝试重命名应答
参数:
class AnswerSummary(val ans: Answer) : Answer(ans.text, ans.id) { ... }
或者使用答案
作为参数,而不是属性:
class AnswerSummary(answer: Answer) : Answer(answer.text, answer.id) { ... }
它将工作,因为当您使用val
参数时,答案被认为是一个属性(没有val
它被认为是参数),并由Gson使用属性名称作为序列化名称进行序列化。同时,您的基类答案
中具有相同的序列化名称@SerializedName("答案")
,因此在序列化属性时存在冲突。
ClassCastException:com.google.gson.internal.LinkedTreeMap不能强制转换为java.util.HashMap 提前谢了。
我需要序列化/反序列化特定枚举: 我有个例外: 我如何通过GSON序列化/反序列化它?
问题内容: 使用Gson 2.2.2,我正在尝试序列化POJO(行为)的数组列表。 我有一个适配器,几乎是我在网上看到的一个副本: 我这样注册: 然后,当我尝试序列化我的ArrayList时: 我出现堆栈溢出。 似乎在线上: 它开始递归循环,一次又一次地通过我的序列化器。那么,我该如何注册它以免发生这种情况?我需要序列化列表并保持多态性。 问题答案: 看起来您发现了JsonSerializer文档
主要内容:1. 数组,2. 集合,3. 泛型在本章中,我们将讨论和学习如何使用数组,集合和泛型的序列化/反序列化。 1. 数组 示例 我们来看看数组的序列化/反序列化。 创建一个名为的Java类文件:GsonTester.java - 执行上面示例代码,得到以下结果 - 2. 集合 让我们看看集合()序列化/反序列化的实际操作。 创建一个名为的Java类文件: GsonTester.java - 执行上面示例代码,得到以下结果 - 3. 泛
主要内容:示例我们将一个Java对象序列化为一个Json文件,然后读取该Json文件以获取对象。 在这个例子中,创建一个类。 然后将对象列化后存储在文件中,该文件将具有对象的json表示形式。 示例 在中创建一个名为的Java类文件,参考以下代码 - 执行上面示例代码,得到以下结果 -
问题内容: 我如何使用gson 2.2.4序列化和反序列化一个简单的枚举? 问题答案: 根据 GsonAPI文档 ,Gson提供了的默认序列化/反序列化,因此基本上,应使用标准和方法(与其他类型一样)对序列化和反序列化。