Mam trochę JSON (nie mam żadnej kontroli ani możliwości zmiany struktury i/lub nazewnictwa w JSON ... ważne, aby pamiętać o tym pytaniu), który ma "płaską" strukturę podobną do to:gson płaski json do obiektów zagnieżdżonych potrzebuje serializera/deserializera?
{
"name": "...",
"email": "...",
"box_background_color": "...",
"box_border_color": "...",
"box_text_color": "...",
...
}
teraz mogę tylko stworzyć prosty obiekt, który trzyma wszystko płaskie, tak jak poniżej:
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;
...
}
Jednak chcę, aby wszystko powiązane z ustawieniami box
było w jego własnej klasie (BoxSettings
). To jest bardziej jak to, co chcę:
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;
...
}
wiem, że jeśli JSON został skonstruowany tak, że ustawienia skrzynki zostały zagnieżdżone wtedy byłoby łatwo osiągnąć to, co chcę, ale ja don nie mają możliwości zmiany struktury JSON, więc nie sugeruj tego (zrobiłbym to, gdybym mógł).
Moje pytanie jest takie: tworzy całą TypeAdapter jedyny sposób, aby osiągnąć to, co chcę czy mogę jeszcze wykonać większość to z adnotacjami? Jeśli nie jest to jedyny sposób, w jaki inny sposób mogę to osiągnąć bez zmiany JSON w ogóle?
Poniżej jest przykład tego, co mam na myśli „tworząc całą 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;
}
}
Znaleźliście jakieś rozwiązanie? – Umair
@Umair nope, jeszcze nie. wciąż czekam. Przepraszam. – bsara