Gson 직렬화/역직렬화를 이용하여 데이터를 가공하기

2022. 6. 16. 18:04·Language/Kotlin

예를 들어 TimeStamp 형식으로 수신되는 데이터를 LocalDateTime 으로 저장해야 하는 경우

데이터 Convert 예제

역직렬화 클래스를 만들어 주어야 합니다.

 

LocalDateTime 이라는 class 를 역직렬화 하기 위해 JsonDeserializer 를 상속받은 Adapter class 를 만들어줍니다.

import com.google.gson.*
import java.lang.reflect.Type
import java.time.LocalDateTime
import java.time.ZonedDateTime

class TimestampConvertAdapter : JsonDeserializer<LocalDateTime> {
    override fun deserialize(json: JsonElement, type: Type, jsonDeserializationContext: JsonDeserializationContext): LocalDateTime {
        return ZonedDateTime.parse(json.asJsonPrimitive.asString).toLocalDateTime()
    }
}

그리고 Gson 을 미리 전역으로 선언해두고 registerTypeAdapter() 메소드를 아래와 같이 이용해줍니다.

private val gson: Gson = GsonBuilder()
        .registerTypeAdapter(LocalDateTime::class.java, TimestampConvertAdapter())
        .create()!!

그리고 gson.fromJson() 로 Json 을 불러와주면, 상단 이미지와 같이 변환을 시켜 DataClass 에 매핑을 성공적으로 잘 시켜줍니다.

 

직렬화 예제로는 Enum 이 아래와 같이 되어있다면

enum class AuthorizationStatus(id: Int) {
    Accepted(1),
    Blocked(2),
    Expired(3),
    Invalid(4)
}

AuthorizationStatus 라는 키 데이터을 id 로 출력해 주어야 한다면, 이렇게 구성해봅시다.

import com.google.gson.JsonElement
import com.google.gson.JsonPrimitive
import com.google.gson.JsonSerializationContext
import com.google.gson.JsonSerializer
import java.lang.reflect.Type
import /* AuthorizationStatus Package Route */

class AuthorizationStatusAdapter : JsonSerializer<AuthorizationStatus> {
    override fun serialize(src: AuthorizationStatus, typeOfSrc: Type, context: JsonSerializationContext): JsonElement {
        return JsonPrimitive(src.id)
    }
}

이렇게 구성해주면, gson.toJson() 에 매번 authorizationStatus.id 와 같이 해주지 않고 data class 에 열거형 값을 그대로 삽입해도, id 로 변환이 되어집니다.

 
 
import com.google.gson.jsonlement import com.google.gson.jsonPrimitive import com.google.gson.jsonserializationcontext import com.google.gson.jserializer import java.lang.reflect.type import / * AuthorizationStatus 패키지 경로 * / classStatusAdapter : jsonserializer <osporizationStatus> {FUN SERIALIZE 재정
반응형
저작자표시 비영리 (새창열림)
'Language/Kotlin' 카테고리의 다른 글
  • IP주소 32비트 정수 변환 및 되돌리기 AI 코드 및 성능 비교
  • Observer 패턴 예제
  • var list = mutableListOf<T>() 를 사용하지 마세요.
  • [Querydsl] n시간 이전 데이터 삭제
Kua
Kua
정보 공유, 개인 정리 공간 입니다.
  • Kua
    Kua's Miscellaneous
    Kua
    • 분류 전체보기 (185)
      • 대문 (2)
      • Tips (25)
        • Chrome (2)
        • Windows (4)
        • IDE (3)
        • 기타 (16)
      • CodingTest (44)
      • Language (20)
        • PHP (5)
        • C# (7)
        • Java (1)
        • Kotlin (7)
      • Framework & Runtime (16)
        • SpringBoot (12)
        • Node.js (2)
        • Vue.js (1)
        • Gradle (1)
      • DevOps (13)
        • Linux (1)
        • Docker (4)
        • Kubernetes (2)
        • Apache Kafka (1)
        • AWS (1)
      • 일상다반사 (53)
        • 도서 (1)
        • 개발 (8)
        • 후기 - IT (7)
        • 후기 - 일상 (13)
        • 차가리 (4)
        • 방송통신대학교 (4)
        • 음식 (2)
      • Games (12)
        • Minecraft (7)
        • VR (2)
        • 그외 (3)
  • 최근 글

  • 인기 글

  • 태그

    Algorithm
    Windows
    Kotlin
    codingtest
    코딩테스트
    minecraft
    Spring Boot
    Silver5
    bronze2
    Plugin
    github
    갤럭시
    bronze1
    spring
    c#
    후기
    java
    백준
    error
    알고리즘
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.0
Kua
Gson 직렬화/역직렬화를 이용하여 데이터를 가공하기
상단으로

티스토리툴바