私は、プロセスが複数のサブプロセスを持つことができるプロセスを表すいくつかのJSONを逆シリアル化しようとしています。親プロセスが作成され、適切に移入されています。ただし、サブプロセスのリストには期待どおりに作成されたオブジェクトが含まれていますが、これらのオブジェクトは移入されません。ここでGSONを使用してJSONリストプロパティを逆シリアル化する
は私の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.
*/
}
OK、toObjectを呼び出すときに、私は戻って取得結果は次のようになりますので:あなたは正しい型のオブジェクトが作成され、サブプロセスのリストに追加されますがプロパティのどれも持っていなかった見ることができるように
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に変更しました。違いはありません。 –