Moshi:当类具有List <object>字段时,将JSON转换为Java对象

时间:2018-11-14 08:24:08

标签: java android json moshi

假设我有这样的东西:

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包含类型ABC的对象

我使用Moshi将其转换为JSON(效果很好)并将其转换回Java。转换回Java无效。

似乎List<Object> elements无法转换回,并且列表中的所有元素都转换为LinkedHashTreeMap对象。

解决此问题的最佳方法是什么? (如果有办法!)

谢谢。

1 个答案:

答案 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);