Я пытаюсь выполнить сериализацию своих объектов обратно в JSON с помощью Google Gson, используя интерфейс JsonSerializer, и, хотя десериализация работает очень хорошо, сериализация не вызывает метод сериализации.Метод сериализации Gson не называется
Serializer/десериализации классов
public enum JsonParser implements JsonDeserializer<Object>, JsonSerializer<Object> {
LANGUAGE(Language.class) {
@Override
public Language deserialize(JsonElement elem, Type type, JsonDeserializationContext context) {
return Language.valueOf(elem.getAsString());
}
@Override
public JsonElement serialize(Object object, Type type, JsonSerializationContext context) {
return new JsonPrimitive(((Language) object).getCode());
}
},
DATA_TYPE(DataType.class) {
@Override
public DataType deserialize(JsonElement elem, Type type, JsonDeserializationContext context) {
return DataType.getByIdentifier(elem.getAsString());
}
@Override
public JsonElement serialize(Object object, Type type, JsonSerializationContext context) {
System.out.println("test");
return new JsonPrimitive(((DataType) object).getIdentifier());
}
};
private final Class clazz;
JsonParser(Class clazz) {
this.clazz = clazz;
}
public Class getParserClass() {
return clazz;
}
}
и испытания:
GsonBuilder gsonBuilder = new GsonBuilder();
for(JsonParser jp : JsonParser.values())
gsonBuilder.registerTypeAdapter(jp.getParserClass(), jp);
Gson gson = gsonBuilder.create();
String json = "{\"type1\":{\"da\":\"Some string\",\"pt_BR\":\"More strings\",\"pl\":\"String 3\",\"eo\":\"String 4\"},\"type2\":{\"pl\":\"String 5\",\"pt_BR\":\"String 6\",\"ru\":\"String 7\"}}";
Map<DataType, Map<Language, String>> map = gson.fromJson(json, new TypeToken<Map<DataType, Map<Language, String>>>(){}.getType());
System.out.println(map);
System.out.println(gson.toJson(map));
Хотя fromJson() возвращает правильные объекты, toJSON() использует по умолчанию ToString() из объектов вместо методов, указанных в serialize().
Похоже, что сериализатор по какой-либо причине не регистрируется (тестовая распечатка не отображается).
Спасибо за любые предложения.
получить поездку в сериализаторе и все должно работать правильно – rpax