Moshi: преобразование JSON в объект Java, когда у класса есть поле List <Object> - PullRequest
0 голосов
/ 14 ноября 2018

Допустим, у меня есть что-то вроде этого:

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 объекты.

Каков наилучший способ решить эту проблему? (если есть способ!)

Спасибо.

1 Ответ

0 голосов
/ 15 ноября 2018

Ответ от Джесси Уилсона отлично работает:

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);
...