O Beagle oferece um serializador/deserializador
customizado por meio da Interface BeagleTypeAdapter.
Com esse Adapter
é possível mapear uma classe qualquer, inclusive as que representam tipos concretos, como um Integer.
Veja abaixo o contrato definido da interface:
interface BeagleTypeAdapter<T> {
fun fromJson(json: String) : T
fun toJson(type: T) : String
}
Neste exemplo cum adapter
foi criado para a interface Person
que é extendida a partir da data class
PersonImpl
que possui somente um atributo name
do tipo String
.
Para criar um adapter
você deve:
adapter
e anotá-la com @RegisterBeagleAdapter.
Neste exemplo o nome dado foi PersonAdapter
Person
que representa a data class PersomImpl.
adapter
(PersonAdapter
) a partir da Interface BeagleTypeAdapter
informando a classe que você quer mapear;fromJson
e toJson
, veja o exemplo abaixo:interface Person
data class PersonImpl(val name: String) : Person
@RegisterBeagleAdapter
class PersonAdapter : BeagleTypeAdapter<Person> {
override fun fromJson(json: String): Person {
val rootObject = JSONObject(json)
return PersonImpl(rootObject.getString(KEY))
}
override fun toJson(type: Person): String {
type as PersonImpl
val rootObject = JSONObject()
rootObject.put(KEY, type.name)
return rootObject.toString()
}
}
Esse método recebe um JSONObject como string e retorna uma instância da classe mapeada (Person).
Esse método recebe o tipo de dado mapeado (Person) e retorna um JSONObject como uma string.
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.