5

我有一个对象,我想在程序的一部分中使用属性进行序列化,但在另一部分中没有。我还有一个 ObjectMapper,它被广泛定制,用于两个序列化。我的第一个倾向是使用 Mixin 来调整是否显示属性,但似乎您只能将它们放在 ObjectMapper 上,而不能放在 ObjectMapper 返回的阅读器上。基本上,我希望能够编写的代码如下所示。

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);
4

2 回答 2

6

正确的。但是,您不能即时更改混入:因为它们用于(反)序列化器的自省,并且结果(实际(反)序列化器)被缓存,所以它们必须作为初始配置的一部分添加。这就是为什么既不ObjectReader也不ObjectWriter公开改变混入的方法的原因:它们只允许在每次调用的基础上改变可以动态改变的东西。

但也许混入不是最好的方法:您是否考虑过使用JSON 视图代替?可以为每个(反)序列化单独更改使用中的活动视图。

于 2012-08-07T15:46:18.510 回答
3

实际上,您可以为序列化或反序列化(或两者兼而有之)配置 mixins:

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

http://wiki.fasterxml.com/JacksonMixInAnnotations

于 2012-08-06T21:05:28.427 回答