Ho alcuni JSON in arrivo (non ho alcun controllo o possibilità di modificare la struttura e/o denominazione all'interno del JSON ... importante da tenere presente in questa domanda) che ha una struttura "piatta" simile a questo:gson flat json per oggetti nidificati ha bisogno di serializzatore/deserializzatore?
{
"name": "...",
"email": "...",
"box_background_color": "...",
"box_border_color": "...",
"box_text_color": "...",
...
}
Ora, posso solo creare un oggetto semplice che mantiene tutto piatta, in questo modo:
public class Settings {
@SerializedName("name")
private String _name;
@SerializedName("email")
private String _emailAddress;
@SerializedName("box_background_color")
private String _boxBackgroundColor;
@SerializedName("box_border_color")
private String _boxBorderColor;
@SerializedName("box_text_color")
private String _boxTextColor;
...
}
Tuttavia, voglio che tutto associato alle impostazioni box
sia nella sua classe (BoxSettings
). Questo è più simile a quello che voglio:
public class Settings {
@SerializedName("name")
private String _name;
@SerializedName("email")
private String _emailAddress;
private BoxSettings _boxSettings
...
}
public class BoxSettings {
@SerializedName("box_background_color")
private String _boxBackgroundColor;
@SerializedName("box_border_color")
private String _boxBorderColor;
@SerializedName("box_text_color")
private String _boxTextColor;
...
}
so che se il JSON è stato strutturato in modo tale che le impostazioni della casella erano annidati allora sarebbe facile da realizzare quello che voglio, però, don Ho la possibilità di cambiare la struttura del JSON, quindi per favore non suggerire questo (lo farei se potessi).
mia domanda è questa: sta creando un'intera TypeAdapter l'unico modo per realizzare ciò che voglio o posso ancora realizzare la maggior parte di questo con annotazioni? Se non è l'unico modo, in quale altro modo posso ottenere questo risultato senza cambiare il JSON?
Il seguente è un esempio di ciò che intendo per "la creazione di un intero TypeAdapter":
public class SettingsTypeAdapter implements JsonDeserializer<Settings>, JsonSerializer<Settings> {
@Override
public JsonElement serialize(Settings src, Type typeOfSrc, JsonSerializationContext context) {
// Add _name
// Add _emailAddress
// Add BoxSettings._boxBackgroundColor
// Add BoxSettings._boxBorderColor
// Add BoxSettings._boxTextColor
return jsonElement;
}
@Override
public Settings deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
// Read _name
// Read _emailAddress
// Read BoxSettings._boxBackgroundColor
// Read BoxSettings._boxBorderColor
// Read BoxSettings._boxTextColor
return settings;
}
}
Hai trovato qualche soluzione? – Umair
@Umair no, non ancora. ancora in attesa. scusa. – bsara