我使用这个类来存储数据
public class Item(var name:String,
var description:String?=null){
}
并在数组列表中使用它
public var itemList = ArrayList<Item>()
使用此代码序列化对象
val gs=Gson()
val itemListJsonString = gs.toJson(itemList)
并反序列化
itemList = gs.fromJson<ArrayList<Item>>(itemListJsonString, ArrayList::class.java)
但此方法将给予LinkedTreeMap
,而不是Item
,因此无法将LinkedTreeMap强制转换为Item
在Kotlin中反序列化到json的正确方法是什么?
4条答案
按热度按时间qco9c6ql1#
尝试使用此代码反序列化列表
fdx2calv2#
您可以定义内联具体化扩展函数,如下所示:
并像这样使用它:
默认情况下,类型在运行时被擦除,所以Gson不知道它必须反序列化哪种
List
。然而,当你声明类型为reified
时,你在运行时保留了它。所以现在Gson有足够的信息来反序列化List
(或任何其他泛型Object)。lp0sw83n3#
在我的代码中,我只用途:
我在这里举一个完整的例子。
首先是类型和列表数组:
主要代码:
退出:
hc8w905p4#
您可以直接执行以下操作,而不是使用已接受的答案(该答案有效,但创建一个对象来获取其类型):
在面向JVM平台时,“Array”代表一个Java数组,它不是一个ArrayList,但是你可以访问其中的项(通常在解析JSON之后就可以访问了)。
如果您仍然需要操作列表,可以通过执行以下操作轻松地将其转换为可变列表: