Gson을 사용하여 다형성 개체 목록을 직렬화하는 방법
직렬화 중에 다형성 개체를 처리할 때 상속 및 클래스 계층 구조가 문제를 일으킬 수 있습니다. 이 문제를 우아하게 해결하는 한 가지 방법은 Gson의 RuntimeTypeAdapterFactory를 사용하는 것입니다.
기본 클래스인 OlixBaseObj와 하위 클래스인 OlixOp가 있는 예를 고려해 보겠습니다. 우리의 목표는 ObixOp를 포함하여 하위 컬렉션을 포함하는 OlixBaseObj의 인스턴스를 직렬화하는 것입니다.
첫 번째 코드 조각에서는 직렬화 중에 상속된 멤버(구체적으로 in 및 out 문자열)가 누락되는 문제가 발생합니다. . 해결책은 RuntimeTypeAdapterFactory를 사용하는 것입니다.
<code class="java">RuntimeTypeAdapterFactory<ObixBaseObj> adapter = RuntimeTypeAdapterFactory .of(ObixBaseObj.class) .registerSubtype(ObixBaseObj.class) .registerSubtype(ObixOp.class); Gson gson2=new GsonBuilder().setPrettyPrinting().registerTypeAdapterFactory(adapter).create(); System.out.println(gson2.toJson(lobbyObj));</code>
작업 예제
여러 하위 클래스가 ObixBaseObj에서 상속되는 시나리오의 경우 ObixBaseObj 내에서 사용자 정의 등록 메커니즘을 구현할 수 있으며 유틸리티 클래스 GsonUtils 활용:
<code class="java">public class ObixBaseObj { // ... private static final RuntimeTypeAdapterFactory<ObixBaseObj> adapter = RuntimeTypeAdapterFactory.of(ObixBaseObj.class); public static void registerType( RuntimeTypeAdapterFactory<?> adapter) { GsonUtils.registerType(adapter); } // ... } public class ObixOp extends ObixBaseObj { // ... public ObixOp() { super(); obix = "op"; } // ... }</code>
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>
<code class="java">ObixBaseObj lobbyObj = new ObixBaseObj(); lobbyObj.setIs("obix:Lobby"); ObixOp batchOp = new ObixOp(); batchOp.setName("batch"); batchOp.setIn("obix:BatchIn"); batchOp.setOut("obix:BatchOut"); lobbyObj.addChild(batchOp); Gson gson = GsonUtils.getGson(); System.out.println(gson.toJson(lobbyObj));</code>
이 접근 방식은 자동으로 하위 클래스를 등록하고 상속된 멤버가 포함되도록 하여 다형성 객체의 직렬화를 단순화합니다. 직렬화된 출력에서.
위 내용은 RuntimeTypeAdapterFactory를 사용하여 Gson으로 다형성 개체 목록을 직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!