[java] Gson 라이브러리에서 커스텀 직렬화 및 역직렬화 처리하는 방법은?
Gson을 사용하여 커스텀 직렬화 및 역직렬화를 처리하려면 다음과 같은 방법을 따를 수 있습니다:
- 직렬화:
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;
}
}
- 역직렬화:
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);
}
}
- 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 라이브러리에서 커스텀 직렬화 및 역직렬화를 처리할 수 있습니다.