프로세스에 여러 개의 하위 프로세스가있을 수있는 프로세스를 나타내는 일부 JSON을 deserialize하려고합니다. 상위 프로세스가 제대로 작성 및 채워집니다. 그러나 하위 프로세스 목록에는 예상대로 개체가 만들어 지지만 이러한 개체는 채워지지 않습니다. 여기 GSON을 사용하여 JSON 목록 속성 역 직렬화
{ "name":"net.sample.parent",
"id":19,
"subProcesses":[{
"name":"net.sample.child",
"id":21,
"subProcesses":[],
"processVariables":{},
"openTasks":null,
"parentProcessId":null}],
"processVariables":{
"id":1,
"startDate":"Aug 28, 2010 12:00:00 AM",
"budget":10000.0,
"userName":"mary",
"endDate":"Aug 28, 2011 12:00:00 AM"},
"openTasks":null,
"parentProcessId":null}
내 코드입니다 GsonBuilder를 만듭니다 :
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(ProcessInstanceSummary.class, new ProcessInstanceCreator());
gsonBuilder.registerTypeAdapter(HumanTask.class, new TaskInstanceCreator());
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());
public class TaskInstanceCreator implements InstanceCreator<HumanTask> {
public HumanTask createInstance(Type type) {
return new SimpleHumanTask();
}
}
public class ProcessInstanceCreator implements InstanceCreator<ProcessInstanceSummary> {
public ProcessInstanceSummary createInstance(Type type) {
return new ProcessInstanceSummaryImpl();
}
}
private class DateDeserializer implements JsonDeserializer<Date> {
public Date deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
JsonPrimitive asJsonPrimitive = json.getAsJsonPrimitive();
return new Date(asJsonPrimitive.getAsLong());
}
}
인터페이스
public interface ProcessInstanceSummary {
String getName();
Long getId();
Map<String, Object> getProcessVariables();
List<HumanTask> getOpenTasks();
List<ProcessInstanceSummary> getSubProcesses();
Long getParentProcessId();
}
구현 :
public class ProcessInstanceSummaryImpl implements ProcessInstanceSummary {
private String name;
private Long id;
private Map<String, Object> processVariables;
private List<HumanTask> openTasks;
private List<ProcessInstanceSummary> subProcesses;
private Long parentProcess;
/*
No arg constructor here
Getters and setters here.
*/
}
여기
내 JSON입니다 toObject를 호출하면 다음과 같다 때 16,
확인 결과, 그래서 내가 다시 얻을 :
dto ProcessInstanceSummaryImpl (id=39)
id Long (id=71)
name "net.sample.parent" (id=74)
openTasks null
parentProcess null
processVariables LinkedHashMap<K,V> (id=75)
subProcesses ArrayList<E> (id=57)
elementData Object[10] (id=66)
[0] ProcessInstanceSummaryImpl (id=69)
id null
name null
openTasks null
parentProcess null
processVariables null
subProcesses null
[1] null
[2] null
[3] null
[4] null
[5] null
[6] null
[7] null
[8] null
[9] null
modCount 1
size 1
올바른 유형의 객체 생성 및 서브 프로세스 목록에 추가되지만 속성 중 어느 것도이되지 않았다 볼 수 있듯이 채워졌습니다.
JSON을 하위 처리하여 파서를 통해 실행하면 예상대로 작동합니다.
누락 된 단계가 있습니까?
도움을 주시면 감사하겠습니다.
인터페이스에 세터를 추가해도 도움이되지 않았습니다. 어쨌든 GSON이 부동산에 직접 접근한다고 생각합니다. 나는 그것과 일치하도록 구현 클래스의 속성을 수정했다. parentProcess를 parentProcessId로 변경했으며 아무런 차이가 없습니다. –