Маппинг JSON c помощью GSON, часть модели не получает данные и все время Null

Есть ответ от api в формате json:

"status": "ok",
"devices": {
 "538764": {
 "id": "538764",
 "name": "",
 "class_name": "Water",
 "device_sn": "7590054",
 "modem_id": "73d0a6",
 "device_time": null,
 "config_time": "1554455381",
 "timezone": "Europe/Moscow",
 "registrators": {
  "cold": {
  "id": "4635497",
  "name": "",
  "channel_id": "160",
  "unit_id": "m³",
  "offset": "0.0000",
  "modem_value": null,
  "last_value": "0.0760",
  "last_value_timestamp": "1615339629",
  "billing_init_value": "0.0520",
"billing_init_timestamp": "1583826840"
}, etc

Используя GSON пытаюсь замаппить ответ по моделям Метод:

    public Devices parseFullElementInfo(String response){
        JsonObject object= JsonParser.parseString(response).getAsJsonObject();
        return gson.fromJson(object, Devices.class);
    }

Класс Devices содержит в себе HashMap<Long, Device>:

public class Devices {
    @SerializedName("devices")
    private HashMap<Long, Device> devicesMap;
    // getters

Класс Device содержит в себе класс Registrators:

public class Device {
    @SerializedName("id")
    private long id;
    @SerializedName("name")
    private String name;
    @SerializedName("class_name")
    private String className;
    @SerializedName("device_sn")
    private long deviceSn;
    @SerializedName("modem_id")
    private String modemId;
    @SerializedName("device_time")
    private long deviceTime;
    @SerializedName("config_time")
    private long configTime;
    @SerializedName("timezone")
    private String timezone;
    @SerializedName("registrators")
    private Registrators registrators;
    // getters

Класс Registrators - это HashMap<String, Registrator> Класс Registrator:

public class Registrator {
    @SerializedName("id")
    private Long id;
    @SerializedName("name")
    private String name;
    @SerializedName("channel_id")
    private String channelId;
    @SerializedName("unit_id")
    private String unitId;
    @SerializedName("offset")
    private Double offset;
    @SerializedName("modem_value")
    private Double modemValue;
    @SerializedName("last_value")
    private Double lastValue;
    @SerializedName("last_value_timestamp")
    private Long lastValueTimestamp;
    @SerializedName("billing_init_value")
    private Double billingInitValue;
    @SerializedName("billing_init_timestamp")
    private Long billingInitTimestamp;
    //getters

Проблем: При использовании метода классы Deivces и Device получают значение без проблем, но данные не маппятся в Registrators, он остается null. Данные registrators точно приходят в api ответе. Предполагаю, что модель Registrators неправильная, но ошибку найти не могу.


Ответы (1 шт):

Автор решения: dbuzin

По совету @woesss, объявил HashMap <String, Registrator> непосредственно в Device:

public class Device {
    @SerializedName("id")
    private long id;
    @SerializedName("name")
    private String name;
    @SerializedName("class_name")
    private String className;
    @SerializedName("device_sn")
    private long deviceSn;
    @SerializedName("modem_id")
    private String modemId;
    @SerializedName("device_time")
    private long deviceTime;
    @SerializedName("config_time")
    private long configTime;
    @SerializedName("timezone")
    private String timezone;
    @SerializedName("registrators")
    private HashMap<String, Registrator> registratorsMap;

После чего Gson начал маппить нормально, это оказалось решением проблемы.

→ Ссылка