はじめに
今回はRepositoryなどでデータの受け口として使うEnumに対してのSerializerを紹介していきます
本文
まず、受け口のデータクラスにあるEnumを肩として持っている変数に下記を追加します
@Serializable(with = Hoge::class)
@SerialName("hoge")
val orderStatus: @Contextual Hoge?,
次に変換用クラスを実装していきます
class HogeSerializer : KSerializer<Hoge> {
override val descriptor: SerialDescriptor
get() = PrimitiveSerialDescriptor("hoge", PrimitiveKind.STRING)
override fun deserialize(decoder: Decoder): Hoge {
// fromCodeは該当Enumクラスにcompanion objectとして探し出すための関数を実装しておく
return Hoge.fromCode(decoder.decodeString())
}
override fun serialize(encoder: Encoder, value: Hoge) {
encoder.encodeString(value.code)
}
}
これで完成です
上記はリモートから受けるものがStringの場合ですがencodeInt
等にすれば他のプリミティブ型でも変換することができます
最後に
KSerializerを使えばリモートからのデータを自分たちのアプリで使いやすいように変換することができるので備忘録として残してみました
以前はDate型に変換するための記事も書いていますので、よければ見てみてください