转换数据类以映射Kotlin

时间:2019-04-04 14:27:02

标签: kotlin casting maps data-class

我的问题是我需要将kotlin中的数据类转换为地图,因为我需要根据需要使用此结构,因为此响应将用于常规类,并且存在后处理,有验证迭代等,与此地图。我的数据类是下一个(播客):

data class PodCast(val id: String, val type: String, val items: List<Item>, val header: Header, val cellType:String? = "")

data class Item(val type: String, val parentId: String, val parentType: String, val id: String, val action: Action, val isNew: Boolean)

data class Header(val color: String, val label: String)

data class Action(val type: String, val url: String)

我手动进行了转换,但是我需要一种更复杂的方法来完成此任务。

谢谢。

2 个答案:

答案 0 :(得分:0)

我做的很简单。我仅使用.properties groovy方法就获得了对象的属性,该方法将对象作为地图提供了。

答案 1 :(得分:0)

您还可以使用Gson进行此操作,方法是将数据类序列化为json,然后将json反序列化为地图。双向转换如下所示:

val gson = Gson()

//convert a data class to a map
fun <T> T.serializeToMap(): Map<String, Any> {
    return convert()
}

//convert a map to a data class
inline fun <reified T> Map<String, Any>.toDataClass(): T {
    return convert()
}

//convert an object of type I to type O
inline fun <I, reified O> I.convert(): O {
    val json = gson.toJson(this)
    return gson.fromJson(json, object : TypeToken<O>() {}.type)
}

看到类似的问题here