Я пытаюсь десериализации следующую структуруDeserialize вложенная объект GSON
{ meta: { keywords: [a, b, c, d]} ... }
другие действующие структуры являются
{ meta: { keywords: "a,b,c,d"} ... }
и
{ meta: {keywords: "a"} ...}
У меня есть эти классы
public class Data {
@PropertyName("meta")
MetaData meta;
...
}
public class MetaData {
List<String> keywords;
...
}
и обычай десериализатор
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);
}
Тогда я пытаюсь применить deserilizer:
Gson gson = new GsonBuilder()
.registerTypeAdapter(Data.class,new CustomDeserilizer())
.create();
Но я получаю ошибку синтаксического анализа, потому что пытаются десериализация данных вместо метаданных, как я могу применить этот десериализатор, чтобы он работал правильно?
Привет, Умер, создал десериализатор для моего класса. Data решила проблему (назначить собственный десериализатор для вложенного объекта), но я искал решение, подобное аннотации @JsonDeserialize в Джексоне. – Osarez