JSON object serialisation / deserialisation
There are two object serialisation/deserialisation libraries used in Zcore:
- XStream
- Jackson
Jackson
To ignore a field from serialisation, add the following annotation to the field:
@JsonIgnore public String getSyncFormat() { String syncFormat = Constants.SYNC_FORMAT; return syncFormat; }
Pretty-print:
mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
Don't output null values:
mapper.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
Ignore Unknown fields when deserialising an object:
public static Object getOneJackson(String fileName, Class clazz) throws IOException, FileNotFoundException { //XStream xstream = new XStream(); //HierarchicalStreamDriver driver= null; ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally mapper.getDeserializationConfig().addHandler(new JacksonProblemHandler()); //mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); Object object = null; try { object = mapper.readValue(new File(fileName), clazz); } catch (JsonMappingException e) { log.debug(e); } return object; } final static class JacksonProblemHandler extends DeserializationProblemHandler { public boolean handleUnknownProperty(DeserializationContext ctxt, JsonDeserializer<?> deserializer, Object bean, String propertyName) throws IOException, JsonProcessingException { JsonParser jp = ctxt.getParser(); // very simple, just to verify that we do see correct token type log.debug("Unknown property: " + propertyName+":"+jp.getCurrentToken().toString() + " in class: " + bean.getClass().getSimpleName() ); // Yup, we are good to go; must skip whatever value we'd have: jp.skipChildren(); return true; } }
- Printer-friendly version
- Login to post comments
- PDF version