Десериализация Джексона с анонимными классами ⇐ JAVA
Десериализация Джексона с анонимными классами
Я весь день искал что-то, что ответило бы на этот вопрос, но пока мне не повезло.
Мой вопрос прост: как правильно десериализовать анонимный объект с помощью Jackson.
частный интерфейс Interface1 { ИНТ getValue(); } public static void testAnonymousObject() выдает IOException { Сопоставитель ObjectMapper = новый ObjectMapper(); mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); Mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE); Mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); Mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); Интерфейс1 testObject = новый Интерфейс1() { частное конечное значение int = 5; @Override публичный int getValue() { возвращаемое значение; } }; String json = mapper.writeValueAsString(testObject); System.out.println("JSON = " + json); Получен интерфейс1 = (Интерфейс1) mapper.readValue(json, Object.class); System.out.println(получено); } Вывод: JSON = ["com.foo.test.JacksonTest$1",{"value":5}] прежде, чем я получу исключение:
Исключение в потоке «main» com.fasterxml.jackson.databind.JsonMappingException: невозможно десериализовать класс com.foo.test.JacksonTest$1 (типа локальный/анонимный) как компонент.< /п> РЕДАКТИРОВАТЬ Просто чтобы уточнить: и Jackson, и XStream могут сериализовать объект. Но, похоже, только XStream может десериализовать объект обратно. Так что этот сценарий можно реализовать.
Я весь день искал что-то, что ответило бы на этот вопрос, но пока мне не повезло.
Мой вопрос прост: как правильно десериализовать анонимный объект с помощью Jackson.
частный интерфейс Interface1 { ИНТ getValue(); } public static void testAnonymousObject() выдает IOException { Сопоставитель ObjectMapper = новый ObjectMapper(); mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); Mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE); Mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); Mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); Интерфейс1 testObject = новый Интерфейс1() { частное конечное значение int = 5; @Override публичный int getValue() { возвращаемое значение; } }; String json = mapper.writeValueAsString(testObject); System.out.println("JSON = " + json); Получен интерфейс1 = (Интерфейс1) mapper.readValue(json, Object.class); System.out.println(получено); } Вывод: JSON = ["com.foo.test.JacksonTest$1",{"value":5}] прежде, чем я получу исключение:
Исключение в потоке «main» com.fasterxml.jackson.databind.JsonMappingException: невозможно десериализовать класс com.foo.test.JacksonTest$1 (типа локальный/анонимный) как компонент.< /п> РЕДАКТИРОВАТЬ Просто чтобы уточнить: и Jackson, и XStream могут сериализовать объект. Но, похоже, только XStream может десериализовать объект обратно. Так что этот сценарий можно реализовать.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение