Gson은 JSON 형식의 다형성 객체 직렬화에 대한 포괄적인 지원을 제공합니다. 다형성은 객체가 공유된 기본 클래스를 가지고 있지만 구현이 다를 때 발생합니다. 이러한 객체를 효과적으로 직렬화하기 위해 Gson은 RuntimeTypeAdapterFactory라는 기능을 제공합니다.
다음 시나리오를 고려해보세요. 기본 클래스 OlixBaseObj와 여기에서 상속되는 여러 하위 클래스(예: OlixOp)가 있습니다. 하위 개체가 포함된 OlixBaseObj 유형의 개체를 직렬화할 때 Gson의 기본 동작은 기본 클래스에 정의된 필드만 직렬화하는 것입니다. 이로 인해 하위 클래스에서 특정 필드가 누락될 수 있습니다.
이 문제를 해결하려면 RuntimeTypeAdapterFactory를 활용할 수 있습니다. 단일 유형 어댑터 아래에 다양한 하위 유형을 등록할 수 있습니다. 이를 통해 Gson은 각 하위 유형에 특정한 필드를 효과적으로 직렬화하여 다형성 객체의 완전한 표현을 제공할 수 있습니다.
<code class="java">RuntimeTypeAdapterFactory<ObixBaseObj> adapter = RuntimeTypeAdapterFactory .of(ObixBaseObj.class) .registerSubtype(ObixBaseObj.class) .registerSubtype(ObixOp.class);</code>
위 코드는 OlixBaseObj 및 OlixOp 하위 유형을 모두 어댑터에 등록합니다. 그런 다음 Gson의 구성에 통합되어 다형성 직렬화를 활성화할 수 있습니다.
<code class="java">Gson gson2=new GsonBuilder().setPrettyPrinting().registerTypeAdapterFactory(adapter).create();</code>
이 수정된 Gson 인스턴스를 사용하면 다형성 객체를 효과적으로 직렬화 및 역직렬화할 수 있으며 기본 클래스에서 상속된 필드와 특정 클래스를 정확하게 보존할 수 있습니다. 하위 클래스입니다.
또는 GsonUtils 클래스를 활용하여 보다 강력하고 확장 가능한 솔루션을 구현할 수 있습니다.
<code class="java">public class GsonUtils { private static final GsonBuilder gsonBuilder = new GsonBuilder() .setPrettyPrinting(); public static void registerType( RuntimeTypeAdapterFactory<?> adapter) { gsonBuilder.registerTypeAdapterFactory(adapter); } public static Gson getGson() { return gsonBuilder.create(); } }</code>
OmixBaseObj 및 해당 하위 클래스 내에서 GsonUtils를 활용하여 해당 하위 유형을 보장할 수 있습니다. 등록은 자동으로 수행됩니다.
<code class="java">public class ObixBaseObj { private static final RuntimeTypeAdapterFactory<ObixBaseObj> adapter = RuntimeTypeAdapterFactory.of(ObixBaseObj.class); private static final HashSet<Class<?>> registeredClasses= new HashSet<Class<?>>(); static { GsonUtils.registerType(adapter); } private synchronized void registerClass() { if (!registeredClasses.contains(this.getClass())) { registeredClasses.add(this.getClass()); adapter.registerSubtype(this.getClass()); } } public ObixBaseObj() { registerClass(); obix = "obj"; } }</code>
이 접근 방식을 사용하면 기본 클래스 또는 하위 클래스의 인스턴스가 생성될 때마다 RuntimeTypeAdapterFactory에 해당 하위 유형이 자동으로 등록되어 포괄적인 직렬화가 보장됩니다.
위 내용은 Gson을 사용하여 다형성 객체를 직렬화하고 JSON 출력에 모든 필드가 포함되도록 하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!