我有一个自定义的泛型列表,它将包含一堆泛型元素。我正在尝试使用gson。以下是课程:
public class List<E> {
private ListElement<E> head;
private ListElement<E> tail;
private elementCount;
}
public class ListElement<E> {
E element;
private ListElement<E> prev;
private ListElement<E> next;
}
这些类就像这样使用
public class AAA {
String x;
}
public class BBB extends AAA {
String y;
}
public class CCC {
String z;
private List<BBB> listOfBBB;
}
当我为CCC调用“toJson”函数时,GSON进入无限循环并崩溃。我假设这是因为ListElement中的循环引用。此外,List和ListElement应以特定方式序列化(如下所述)。
我在这个网站上阅读了很多答案 - 关于自定义GSON序列化/反序列化的大量讨论。我还审查了GSON文档,类似的建议。但是,这个特殊情况没有涉及,或者至少我不知道如何解决这个问题。
所以我开始为List创建自定义序列化。理想情况下,List的GSON序列化应首先打印elementCount,然后遍历列表元素并仅序列化“元素”。头/尾不应该被序列化,因为它们仅在运行时具有意义。
但我不知道List级别的“E”类型。所以我想我会在ListElement中添加一个辅助函数。但是,即使在ListElement类中,我也不是元素的类型。
如何为这种情况创建自定义序列化程序?我是否只为我知道类型的类(即CCC或BBB)强制创建自定义序列化程序?有更简单的解决方案吗?