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

実際には、シリアライゼーションまたはデシリアライゼーション (またはもちろん両方) の mixin を構成できます。

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 に答える