2012-08-06 5 views
5

Tengo un objeto que me gustaría serializar con un atributo en una parte de mi programa, pero sin una parte diferente. También tengo un ObjectMapper ampliamente personalizado que utilizo para ambas serializaciones. Mi primera inclinación fue usar un Mixin para modificar si se muestra el atributo, pero parece que solo puedes poner esos en ObjectMapper y no en un lector devuelto por ObjectMapper. Básicamente, el código que me gustaría poder escribir sería el siguiente.¿Cómo agrego una mezcla de Jackson a un lector y no al asignador de objetos?

ObjectMapper myMapper = new ObjectMapper(); // in reality there is a lot of customization 
Foo foo = myMapper.reader().withMixin(Foo.class, FooMixin.class).readValue(jsonParser, Foo.class); 

Respuesta

5

correcta. Sin embargo, no puede cambiar las mezclas al vuelo: dado que se usan para la introspección de (de) serializadores, y los resultados (los (reales) serializadores) se almacenan en caché, se deben agregar como parte de la configuración inicial. Es por eso que ni ObjectReader ni ObjectWriter exponen los métodos para cambiar las mezclas: solo permiten el cambio de elementos que se pueden cambiar dinámicamente, por llamada.

Pero quizás las mezclas no son la mejor manera de hacerlo: ¿ha considerado utilizar JSON Views en su lugar? La vista activa en uso se puede cambiar por separado para cada (de) serialización.

3

En realidad, puede configurar mixins para la serialización o deserialización (o ambas cosas, por supuesto):

objectMapper.getSerializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class); 
objectMapper.getDeserializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class); 

http://wiki.fasterxml.com/JacksonMixInAnnotations

Cuestiones relacionadas