0

シリアライザーに問題があります。ここに私の問題があります:

私はそのようなBeanクラスを持っています:

@JsonSerialize(using = MyObjectSerializer.class)
public class MyObject {
    public int a;
    public boolean b;
}

@ JsonSerialize アノテーションなしで Jackson を介してシリアライズすると、明らかに次のようになります。

{ "a": 42, "b": true}

しかし、次のようにプロパティを追加する必要があります。

{ "a": 42, "b": true, "version": "0.1-beta" }

(これは一例です。実世界では、追加するプロパティはオブジェクトのいくつかのプロパティに依存します)

そのため、カスタム シリアライザーを作成する必要があります。ただし、私の実際のコードでは、クラスには 2 つよりもはるかに多くのプロパティが含まれています。そのため、これらのプロパティを json オブジェクトに手動で作成したくありません...

私がこれを使用する場合:

public static class MyObjectSerializer extends JsonSerializer<MyObject> {
    @Override public void serialize(MyObject obj, JsonGenerator json, SerializerProvider provider) throws IOException, JsonProcessingException {
        json.writeObject(obj);
    }
}

明らかに StackOverflowError が発生します。

したがって、質問は次のようになります。

  • JsonSerializer の内部から、シリアライザー自体を再呼び出しせずにオブジェクトをシリアル化するにはどうすればよいですか?

また

  • シリアル化されているオブジェクトにプロパティを動的に追加するにはどうすればよいですか。

私はGSonでいつもそうしていましたが、Jacksonは私が使いたいと思う機能をたくさん提供しています;)

4

1 に答える 1

0

あなたの例getVersion()では、バッキングプロパティのないゲッターで十分だと確信しています0.1-beta。(または、説明したように、いくつかのプロパティの値に基づいて値を生成します)。

したがって、この目的のためだけにカスタムシリアライザーは必要ありません

于 2012-05-31T08:17:45.960 に答える