[java] Gson 라이브러리에서 커스텀 직렬화 및 역직렬화 처리하는 방법은?

Gson을 사용하여 커스텀 직렬화 및 역직렬화를 처리하려면 다음과 같은 방법을 따를 수 있습니다:

  1. 직렬화: com.google.gson.JsonSerializer 인터페이스를 구현하는 커스텀 직렬화기를 작성합니다. 이 인터페이스에는 serialize 메서드가 있으며, 여기서는 자바 객체를 원하는 형식의 JSON으로 직렬화합니다. 예를 들어, 다음은 Person 객체를 JSON으로 직렬화하는 간단한 커스텀 직렬화기의 예입니다:
import com.google.gson.JsonElement;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import java.lang.reflect.Type;

public class PersonSerializer implements JsonSerializer<Person> {
    @Override
    public JsonElement serialize(Person person, Type typeOfSrc, JsonSerializationContext context) {
        JsonObject json = new JsonObject();
        json.addProperty("name", person.getName());
        json.addProperty("age", person.getAge());
        return json;
    }
}
  1. 역직렬화: com.google.gson.JsonDeserializer 인터페이스를 구현하는 커스텀 역직렬화기를 작성합니다. 이 인터페이스에는 deserialize 메서드가 있으며, 여기서는 JSON을 자바 객체로 역직렬화합니다. 예를 들어, 다음은 JSON에서 Person 객체를 역직렬화하는 간단한 커스텀 역직렬화기의 예입니다:
import com.google.gson.JsonElement;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import java.lang.reflect.Type;

public class PersonDeserializer implements JsonDeserializer<Person> {
    @Override
    public Person deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
        JsonObject jsonObject = json.getAsJsonObject();
        String name = jsonObject.get("name").getAsString();
        int age = jsonObject.get("age").getAsInt();
        return new Person(name, age);
    }
}
  1. Gson 설정: Gson 빌더를 사용하여 커스텀 직렬화기와 역직렬화기를 등록한 후 Gson 인스턴스를 만듭니다. 예를 들어:
Gson gson = new GsonBuilder()
    .registerTypeAdapter(Person.class, new PersonSerializer())
    .registerTypeAdapter(Person.class, new PersonDeserializer())
    .create();

이제 Gson 인스턴스를 사용하여 객체를 JSON으로 직렬화하거나, JSON을 객체로 역직렬화할 수 있습니다:

Person person = new Person("John", 30);
String json = gson.toJson(person); // 객체를 JSON으로 직렬화
Person deserializedPerson = gson.fromJson(json, Person.class); // JSON을 객체로 역직렬화

이렇게 Gson 라이브러리에서 커스텀 직렬화 및 역직렬화를 처리할 수 있습니다.