反序列化时需要一个列表,但得到一个带有嵌套对象的类 java.util.HashMap
Posted
技术标签:
【中文标题】反序列化时需要一个列表,但得到一个带有嵌套对象的类 java.util.HashMap【英文标题】:Expected a List while deserializing, but got a class java.util.HashMap with nested object 【发布时间】:2022-01-02 21:16:04 【问题描述】:我有嵌套数据类的问题。这是我的数据类:
@Entity(tableName = "categories_table")
data class Category(
var details: String = "",
@PrimaryKey
var id: String = "",
var lastUpdated: Long = -1,
var name: String = "",
var order: Int = -1,
val specialities: ArrayList<String> = arrayListOf()
)
这是我的数据库:
我使用此代码从数据库中获取数据:
val valueEventListener = object : ValueEventListener
override fun onDataChange(snapshot: DataSnapshot)
categories.clear()
specialities.clear()
for (cat in snapshot.children)
val category: Category? = cat.getValue(Category::class.java)
for (spec in cat.children)
spec.getValue(String::class.java)?.let specialities.add(it)
category?.let categories.add(it)
_categories.value = categories
override fun onCancelled(error: DatabaseError)
throw error.toException()
categoryRef.addListenerForSingleValueEvent(valueEventListener)
我有很多关于这个问题的主题,但找不到解决方案,总是得到这个错误:
Expected a List while deserializing, but got a class java.util.HashMap
编辑 我有进步)
for (cat in snapshot.children)
val categoryMap: Map<String, Any> = cat.value as Map<String, Any>
val category = Category(details = categoryMap.getValue("details").toString(), name = categoryMap.getValue("name").toString(),
id = categoryMap.getValue("id").toString(), lastUpdated = categoryMap.getValue("lastUpdated").toString().toLong(),
order = categoryMap.getValue("order").toString().toInt())
categories.add(category)
我不确定我解析的地图是否正确,但它确实有效。如果我错了请告诉我)
【问题讨论】:
“categoryRef”是如何定义的?biochemistry
、dentist
等里面有什么?
【参考方案1】:
问题似乎来自val specialities: ArrayList<String> = arrayListOf()
。
为了使您的数据库屏幕截图中的专业被视为List
,它们将具有带有连续数字键的已定义顺序:0
、1
、2
等。但是 have 是一堆键,每个键都有一个值或一个嵌套对象,转换为Map<String, Object>
。
val specialities: Map<String, Object> = mapOf()
【讨论】:
以上是关于反序列化时需要一个列表,但得到一个带有嵌套对象的类 java.util.HashMap的主要内容,如果未能解决你的问题,请参考以下文章
Java - 如何反序列化带有嵌套对象和列表的 JSON 数组? [复制]
在自定义JsonConverter中反序列化嵌套对象List
C# 使用对象列表中的对象反序列化 JSON - 但无法访问它
反序列化带有标记为 AsReference 的成员的类时删除了 ProtoException