Похоже, что метод readValue()
изменяет файл после чтения. Это происходит с Джексоном версии 2.9.8 и версии 2.9.10.3
Это метод, который я вызываю для сериализации объекта в файл, и он отлично сериализуется.
public void saveToFile() throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.writerFor(Type.class).withDefaultPrettyPrinter().writeValue(new File("C:\\Path\\To\\File.json"), object);
}
При десериализации я использую этот вызов:
public Type restoreFromFile() throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
Type restoredObj = objectMapper.readValue(new File("C:\\Path\\To\\File.json"), Type.class);
}
Когда отладчик переходит к следующей инструкции (просто для l oop, которая никак не касается файла, но перебирает restoredObj
) my File.json
изменяется, как если бы другой Obj
класса Type
был сериализован без следования тем же тегам, которые использует обычная сериализация (он помещает некоторые значения в null
и не сериализуется с использованием @JsonIdentityInfo
).
Обратите внимание, что Obj
корректно десериализуется при первом вызове метода restore()
, но если я вызываю его дважды подряд, Obj
десериализуется со значениями null
вместо правильных.