Home Kotlinx-serialization: PolymorphicSerializer
Post
Cancel

Kotlinx-serialization: PolymorphicSerializer

들어가며

본 글에서는 kotlinx-serialization을 사용할 때 Custom Serializer - PolymorphicSerializer 를 사용하는 방법에 대한 정리.

retrofit에서 CustomConvertor를 추가하는 내용과 동일한 목적을 가진다.

PolymorphicObject

1
2
3
4
5
6
7
8
9
10
11
12
13
interface IPolymorhicType {
  val type: String
}

data class First(
  override val type: String = "F",
  ...
) : IPolymorhicType

data class Second(
  override val type: String = "S",
  ...
) : IPolymorhicType

위 처럼 주어진 type에 따라 First 또는 Second property를 가지는 model이 있을때 적용하는 사용하는 방법

Add Serializable

1
2
3
4
5
@Serializable
data class First(...) : IPolymorhicType

@Serializable
data class Second(...) : IPolymorhicType

Serializer implements

1
2
3
4
5
6
7
8
9
10
11
12
13
14
object MySerializer :
  JsonContentPolymorphicSerializer<IPolymorhicType>(IPolymorhicType::class) {
  override fun selectDeserializer(element: JsonElement) = when (element.jsonObject["type"]?.jsonPrimitive?.content) {
    "F" -> First.serializer()
    else -> Second.serializer()
  }
}

@Serializable
data class Parent(
  @Serializable(with = MySerializer::class)
  val data: IPolymorhicType,
  ...
)
This post is licensed under CC BY 4.0 by the author.

Android: Compose Text dp 적용하기

Spring: Querydsl 환경설정 및 용례