2016-04-18 13 views
0

私はvertxジャクソンを開発中です。私のクラスの一つで、私は、このような何かをタイプJsonObjectの場を得た:ジャクソンを使用してvertx JsonObjectをシリアライズ

class User 
    private String name; 
    private JsonObject details; 

この詳細フィールドは、他のJsonObjectsまたはJsonArrays、例えば含めることができます:私は、専用のを持っていない {"details": [{"street": "Broadway"}, {"building": 20}]}
をこの構造のクラスは、固定された構造がなく、変化する可能性があります。
詳細オブジェクトは、このような方法で作成されている:

JsonObject details = new JsonObject().put("name", "value").put("another", "another") 

このaproachは私が私のコード内の任意の構造の詳細を格納することができます。バックエンドでこのデータを操作する必要がない限り、特別な構造を作成する必要はありません。
Jacksonを使用してこれをシリアル化しようとするまでは、すべてがうまく動作します。JsonObject残念ながら、美しいJSON文字列の代わりに、Jacksonは私にmapというオブジェクトをすべてのマップの追加フィールドと共にシリアル化してくれます。

にはどうすればジャクソンを使用してVERTXJsonObjectシリアライズすることができますか?

+0

JsonObjectの代わりにJacksonのJsonNodeを使用できます。 –

+0

残念ながら、私は 'JsonObject'が必要です。それに依存するコードがたくさんあります。 – WhiteAngel

答えて

0

最後に、vertxには既にシリアライザの独自の実装があることが判明しました。 serialization(Jackson Undercoverを使用します)を実行するには、クラスを使用するだけで十分です。

JsonObject user = new JsonObject(Json.encode(new User()); 

これは問題なく動作します。

+0

これは非常に非効率に見えます:これは、UserオブジェクトをJSONにシリアル化してから(JsonObjectコンストラクタが呼び出されたときに)デシリアライズしてから(JsonObjectをシリアル化してワイヤで送信すると) –

+0

中間の文字列を使わずに 'User'から' JsonObject'に移動するには、[JsonObject.mapFrom](http://vertx.io/docs/apidocs/io/vertx/core/json/JsonObject.html#mapFrom-java ≧オブジェクト - ) –

1

JsonObject's javadocを見ると、私はgetMap()の方法を見た。私はJacksonがマップを簡単にシリアライズできることを知っています。

関連する問題