Я сталкиваюсь с этой проблемой при использовании Gson для сериализации объекта, который имеет член класса того же типа:
https://github.com/google/gson/issues/1447
Объект:
public class StructId implements Serializable {
private static final long serialVersionUID = 1L;
public String Name;
public StructType Type;
public StructId ParentId;
public StructId ChildId;
И поскольку StructId содержит ParentId/ChildId того же типа, я получал бесконечный цикл при попытке сериализовать его, поэтому я сделал следующее:
private Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() {
public boolean shouldSkipClass(Class<?> clazz) {
return false; //(clazz == StructId.class);
}
/**
* Custom field exclusion goes here
*/
public boolean shouldSkipField(FieldAttributes f) {
//Ignore inner StructIds to solve circular serialization
return ( f.getName().equals("ParentId") || f.getName().equals("ChildId") );
}
})
/**
* Use serializeNulls method if you want To serialize null values
* By default, Gson does not serialize null values
*/
.serializeNulls()
.create();
Но этого недостаточно, потому что мне нужны данные внутри Parent/Child, и игнорирование их при сериализации не является решением. Как это возможно решить?
Связано с ответом, помеченным как Решение:
У меня есть такая структура: - Struct1 -- Table --- Variable1
Как видите, ParentId таблицы — «Struct1», но ChildId «Struct1» пуст и должен быть «Table».
B.R.