GSON действуют по-разному для одного и того же объекта, если он обернут? - PullRequest
0 голосов
/ 13 сентября 2011

Рассказ: У меня есть List<A> list. Если я использую gson.toJson(list) - работает нормально. Если у меня есть ListContainer(list), то gson.toJson(listContainer) возвращает список с пустыми объектами. Зачем? Как я могу решить это?

import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.List;

public class GsonTest {

    public static void main(String[] args) {
        new GsonTest();
    }

    public GsonTest() {

        Gson gson = new Gson();
        List<BasicInterface> kws = new ArrayList<BasicInterface>();

        for (int i = 0; i < 3; i++) {
            BasicInterface kw = new BasicInterfaceImpl("string_" + i);
            kws.add(kw);
        }

        System.out.print(gson.toJson(kws));
        /** Prints: [{"expression":"string_0"},{"expression":"string_1"},{"expression":"string_2"}] */

        Container kwc = new Container(kws);

        System.out.print(gson.toJson(kwc));
        /** Prints: {"list":[{},{},{}]}  */

    }
}

public class Container {

    private List<BasicInterface> list;

    public Container(List<BasicInterface> kws) {
        this.list = kws;
    }

    public List<BasicInterface> getList() {
        return list;
    }
}

public interface BasicInterface {

    String getExpression();
}

public class BasicInterfaceImpl implements BasicInterface {
    private String expression;

    public BasicInterfaceImpl(String expression) {
        this.expression = expression;
    }

    @Override
    public String getExpression() {
        return expression;
    }
}

1 Ответ

0 голосов
/ 13 сентября 2011

Быстрое исправление: используйте BasicInterfaceImpl вместо BasicInterface при объявлении переменной и методов в Контейнер .

Почему? Не знаю Я потратил час на отладку источников GSON, но пока точно не могу сказать: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...