다형성 개체 목록의 Gson 직렬화
Gson은 RuntimeTypeAdapterFactory를 사용하여 다형성 개체를 직렬화하는 솔루션을 제공합니다. 이 클래스는 상속된 멤버의 직렬화를 자동으로 처리하므로 사용자 지정 직렬 변환기를 작성할 필요가 없습니다.
구현
RuntimeTypeAdapterFactory를 사용하려면 다음 단계를 따르세요.
예
<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); 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>
출력
<code class="json">{ "type": "ObixBaseObj", "obix": "obj", "is": "obix:Lobby", "children": [ { "type": "ObixOp", "in": "obix:BatchIn", "out": "obix:BatchOut", "obix": "op", "name": "batch", "children": [] } ] }</code>
고급 사용 사례
많은 수의 하위 클래스를 처리하려면 GsonUtils와 같은 유틸리티 클래스를 생성하여 등록을 관리하고 중앙 집중식 Gson 인스턴스를 제공하세요.
<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(); } } public class ObixBaseObj { private static final RuntimeTypeAdapterFactory<ObixBaseObj> adapter = RuntimeTypeAdapterFactory.of(ObixBaseObj.class); private static final HashSet<Class<?>> registeredClasses= new HashSet<>(); 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"; } } public class ObixOp extends ObixBaseObj { private String in; private String out; public ObixOp() { super(); obix = "op"; } public ObixOp(String in, String out) { super(); obix = "op"; this.in = in; this.out = out; } }</code>
이 접근 방식을 사용하면 다형성 객체의 상속된 모든 멤버가 자동으로 직렬화 및 역직렬화되어 복잡한 상속 계층을 처리하기 위한 편리한 솔루션을 제공합니다.
위 내용은 RuntimeTypeAdapterFactory를 사용하여 Gson으로 다형성 객체 목록을 어떻게 직렬화합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!