Преобразование класса данных в карту kotlin

Моя проблема в том, что мне нужно преобразовать класс данных в kotlin в карту, потому что мне нужно работать с этой структурой как с требованием, потому что этот ответ будет использоваться для классов groovy и есть постпроцесс, где есть проверки итерации и т. д., с этой картой. Мой класс данных следующий (подкаст):

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)

Я сделал преобразование вручную, но мне нужен более сложный способ для выполнения этой задачи.

Спасибо.


person rasilvap    schedule 04.04.2019    source источник
comment
Как должен выглядеть Map? Вы сделали преобразование вручную... где? Какой подход квалифицируется как более изощренный?   -  person Slaw    schedule 04.04.2019
comment
Какой класс вам нужно преобразовать в Map?   -  person Louis    schedule 04.04.2019
comment
Карта должна быть картой ключевых значений, более сложной, я имею в виду общий способ добиться этого.   -  person rasilvap    schedule 04.04.2019
comment
карта ключевых значений. Вот что такое карта . Какие должны быть ключи и какие должны быть значения? Что вы уже пробовали и почему это недостаточно универсально?   -  person Slaw    schedule 04.04.2019
comment
Мне нужно преобразовать это в карту, потому что я должен работать с этой картой, так как она заводная, и с этой картой есть пост-обработка, итерации, запрос файлов и т. д.   -  person rasilvap    schedule 04.04.2019
comment
Возможный дубликат самоанализ Java: объект для сопоставления   -  person Moira    schedule 04.04.2019
comment
Возможный дубликат Как преобразовать объект класса данных Kotlin в карту?   -  person Can_of_awe    schedule 04.04.2019
comment
Последний (stackoverflow.com/questions/49860916/) - это противоположный способ. Мне нужно преобразовать объект в карту. А другой - это способ Java (stackoverflow.com/ вопросов/6796187/), я ищу более колинский способ.   -  person rasilvap    schedule 04.04.2019


Ответы (2)


Вы также можете сделать это с помощью 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)
}

См. аналогичный вопрос здесь

person Tom Hanley    schedule 25.07.2019

Я сделал это очень просто. Я получил свойства объекта, просто используя groovy-метод .properties, который дал мне объект в виде карты.

person rasilvap    schedule 05.04.2019