Ich versuche, die folgende StrukturDeserialize verschachteltes Objekt mit Gson
{ meta: { keywords: [a, b, c, d]} ... }
andere gültige Strukturen zu deserialisiert sind
{ meta: { keywords: "a,b,c,d"} ... }
und
{ meta: {keywords: "a"} ...}
Ich habe diese Klassen
public class Data {
@PropertyName("meta")
MetaData meta;
...
}
public class MetaData {
List<String> keywords;
...
}
und ein benutzerdefinierter Deserializer
public static class CustomDeserilizer implements JsonDeserializer<MetaData>{
@Override
public MetaData deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
List<String> keywords = null;
Gson gson = new Gson();
MetaData metaData = gson.fromJson(json, AppMetaData.class);
JsonObject jsonObject = json.getAsJsonObject();
if (jsonObject.has("keywords")) {
JsonElement elem = jsonObject.get("keywords");
if (elem != null && !elem.isJsonNull()) {
if (jsonObject.get("keywords").isJsonArray()) {
keywords = gson.fromJson(jsonObject.get("keywords"), new TypeToken<List<String>>() {
}.getType());
} else {
String keywordString = gson.fromJson(jsonObject.get("keywords"), String.class);
keywords = new ArrayList<String>();
list.addAll(Arrays.asList(keywordString.split(",")));
}
}
}
metaData.setKeywords(keywords);
}
Dann versuche ich, die deserilizer anwenden:
Gson gson = new GsonBuilder()
.registerTypeAdapter(Data.class,new CustomDeserilizer())
.create();
Aber ich einen Parsing-Fehler erhalten, weil versucht, Daten statt MetaDaten deserialisiert, wie kann ich mich bewerben dieser Deserializer, damit es richtig funktioniert?
Hallo Umer, erstellt der Deserializer für meine Klasse Daten löste das Problem (zuweisen Sie einen benutzerdefinierten Deserializer für ein verschachteltes Objekt), aber ich suchte nach einer Lösung wie der @ JsonDeserialize Annotion in Jackson. – Osarez