假设我有这样的东西:
public class Container implements Serializable {
private List<Object> elements;
[... some other fields ...]
}
public class A implements Serializable {
...
}
public class B implements Serializable {
...
}
public class C implements Serializable {
...
}
List<Object> elements
包含类型A
,B
或C
的对象
我使用Moshi将其转换为JSON(效果很好)并将其转换回Java。转换回Java无效。
似乎List<Object> elements
无法转换回,并且列表中的所有元素都转换为LinkedHashTreeMap
对象。
解决此问题的最佳方法是什么? (如果有办法!)
谢谢。
答案 0 :(得分:2)
Jesse Wilson的回答非常有效:
public class Container implements Serializable {
private List<Item> elements;
[... some other fields ...]
}
public abstract class Item implements Serializable {}
public class A extends Item {
...
}
public class B extends Item {
...
}
public class C extends Item {
...
}
...
Moshi moshi = new Moshi.Builder()
.add(PolymorphicJsonAdapterFactory.of(Item.class, "item_type")
.withSubtype(A.class, "a")
.withSubtype(B.class, "b")
.withSubtype(C.class, "c"))
.build();
containerAdapter = moshi.adapter(Container.class);