2017-05-23 9 views
2

snakeyamlから移行していますが、snakeyamlの機能は、出力YAMLにオブジェクトタイプを自動的に書き込んで、逆シリアル化が透過的で簡単にできるということです。私はJackson Databindで同じ機能を見つけることができません。Jackson databind - ターゲットクラスを指定せずにオブジェクトをデシリアライズする方法は?

単にObject.classを指定すると、予想されるLinkedHashMapが取得されます。さらに、これが機能するには、JSONのクラスタイプを参照する必要があり、それを行うネイティブな方法が見つかりませんでした。

これは必須ですか?私が正しく、おそらくあなたは、私は、実際のオブジェクトデータの前にクラス名を付加終わったとドキュメント

// Include Java class name ("com.myempl.ImplClass") as JSON property "class" 
    @JsonTypeInfo(use=Id.CLASS, include=As.PROPERTY, property="class") 
+0

それまでは、シリアル化しているクラスをフィールドストアに格納し、そのデータをマップに読み込み、そのフィールドを検索してから型を取得し、最後にインポートを再実行します: – Walter

答えて

0

は、実際にその前を分割しましたデータをデシリアライズしてオブジェクトに戻します。これはsnakeyamlが自動的に行う処理です。私はジャクソンでこれを自動的に行うことを望んでいた。

+0

私が欲しいもののように見える、それを試してみましょう:)。 – Walter

+0

私はLinkedHashMapも持っているので、私は明らかにそれを読み返すときに何かをする必要があります。このアプローチのもう一つの問題は、JacksonとSnakeyamlの両方をサポートしたいので、私は自分のコードをJacksonに依存させたくないということです。つまり、このJsonTypeInfoアノテーションではメタデータが書き込まれますが、オブジェクトマッパーをプログラムで設定することでプログラムで行うことができるのだろうかと思います。 – Walter

関連する問題