Retrofit POJO имеет значение null, но JSON действителен

Почесал голову над этим. Ответ JSON является допустимым:

{
    "MRData": {
        "xmlns": "http://ergast.com/mrd/1.4",
        "series": "f1",
        "url": "http://ergast.com/api/f1/current/2.json",
        "limit": "30",
        "offset": "0",
        "total": "1",
        "RaceTable": {
            "season": "2014",
            "round": "2",
            "Races": [
                {
                    "season": "2014",
                    "round": "2",
                    "url": "https://en.wikipedia.org/wiki/2014_Malaysian_Grand_Prix",
                    "raceName": "Malaysian Grand Prix",
                    "Circuit": {
                        "circuitId": "sepang",
                        "url": "http://en.wikipedia.org/wiki/Sepang_International_Circuit",
                        "circuitName": "Sepang International Circuit",
                        "Location": {
                            "lat": "2.76083",
                            "long": "101.738",
                            "locality": "Kuala Lumpur",
                            "country": "Malaysia"
                        }
                    },
                    "date": "2014-03-30",
                    "time": "08:00:00Z"
                }
            ]
        }
    }
}

POJO для ответа:

public class ApiResponse {
    MRData mrdata;

    public class MRData {
        String xmlns;
        String series;
        String url;
        String limit;
        String offset;
        String total;
        RaceTable raceTable;
    }
}

Объект apiResponse всегда имеет значение null. Кто-нибудь может указать, что здесь не так с объектом POJO? Спасибо.


person user2511882    schedule 18.01.2015    source источник
comment
У нас возникла проблема с использованием Gson для десериализации JSON, и мы обнаружили, что виновником заголовка stackoverflow.com/questions/13171058/   -  person Leigh    schedule 19.01.2015


Ответы (1)


Я вижу здесь пару потенциальных проблем:

  1. Вы определяете класс внутри другого класса; Я никогда не видел, чтобы это делалось так. Возможно, вы захотите разделить их на два разных файла.

  2. Имена ваших переменных в вашем POJO должны точно совпадать с именами переменных в ответе JSON. Например:

public class ApiResponse {MRData MRData;}

Если вы хотите, чтобы переменные вашего POJO отличались от того, что возвращает JSON, вам следует использовать @SerlizedName.

person Emmanuel    schedule 19.01.2015
comment
Насколько я знаю, у нас может быть класс внутри другого класса, который также работает. - person N Sharma; 19.01.2015
comment
@Emmanuel - первое сделанное вами замечание неверно. Я использую модернизацию в течение достаточно долгого времени, и эта схема действительно распространена. Корпус был проблемой для меня.! Спасибо - person user2511882; 19.01.2015
comment
Это было не столько доводом, сколько тем, что, возможно, это вызывает проблемы. Я никогда не видел, чтобы это делалось таким образом. Рад, что ваша проблема была исправлена. - person Emmanuel; 19.01.2015