Я хочу десериализации JSON как это:Вложенные объекты JSON в глубоких уровней в модифицированной
{
"software": {
"info": {
"id": "1",
"name": "نرم اقزار",
"type": "complex"
},
"sub": {
"windows": {
"info": {
"id": "2",
"name": "ویندوزی",
"type": "complex"
},
"sub": {
"photoshop": {
"info": {
"id": "3",
"name": "فوتوشاپ",
"type": "product"
}
},
"word": {...}
,
"matlab": {...}
}
}
},
"ios": {...},
"linux": {...}
}
}
}
для этого в Retrofit
я запрограммировал некоторые модели, как это:
Root.java
public class Root {
public Software software;
}
Software.java
public class Software {
public Info info;
public Sub sub;
}
Info.java
public class info {
public int id;
public String name;
public String type;
}
Sub.java
public class sub {
public Software software;
}
предположим, все добытчика и сеттеры в классах.
мой интерфейс:
ServicesAPI.java
public interface ServicesAPI {
@GET("services.php")
Call<Root> getSofwares();
}
и, наконец, моя MainActivity это:
Gson gson = new GsonBuilder()
.setLenient()
.create();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
ServicesAPI servicesAPI = retrofit.create(ServicesAPI.class);
Call<Root> call = servicesAPI.getSofwares();
call.enqueue(new Callback<Root>() {
@Override
public void onResponse(Call<Root> call, Response<Root> response) {
//some codes
}
@Override
public void onFailure(Call<Root> call, Throwable t) {
//
}
});
, когда я строю этот код и запустить его, модели просто получите данные объектов на уровне один и два. и объект третьего уровня всегда дает null
.
Возможно, это может быть вызвано рекурсивным определением (не имеет никакого отношения к тому, чтобы быть на 3-м уровне)? – muratgu
точно я хочу быть рекурсивным. конечно, я тестировал несколько разных классов вместо «Software». например, 'SoftwareInLevelTwo'. но он был снова «null» – MHSFisher