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 винаги е нула. Някой може ли да посочи какво не е наред с обекта 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
AFAIK можем да имаме клас в друг клас, това също работи. - person N Sharma; 19.01.2015
comment
@Emmanuel - Първата точка, която направихте, е невалидна. Използвам ретрофит от доста време и този модел е наистина често срещан. Корпусът беше проблем за мен! Благодаря - person user2511882; 19.01.2015
comment
Не беше толкова важно, колкото може би това създава проблеми. Никога не съм го виждал да се прави по този начин. Радвам се, че проблемът ти е решен. - person Emmanuel; 19.01.2015